c语言中如(*P)[3]如果出现这*(*(P+i)+j)两个*是什么意思啊,求解啊

如题所述

p为指向3个元素的一维数组的指针
p+i表示第i个包含3个元素的一维数组的首地址
*(p+i),对p+i解引用,得到p+i的内容,为一维数组p+i的首元素的首地址
*(p+i)+j,一维数组p+i的第j个元素的地址
*(*(p+i)+j),一维数组p+i的第j个元素的内容
如果p指向一个二维数组a[i][j],那么*(*(p+i)+j)等价于a[i][j]追问

不是吧,p+i表示第i个包含3个元素的一维数组的首地址
那么*(p+i)不就是取该首地址的值吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-29
我们这样来看
int arr[3] 这是一个大小为3的整型数组
那么
int (*p)[3] 这就是一个指向上述数组的指针
所以p+i也是一个指向上述数组的指针,即 *(p+i) 和上述数组是同类型的
那么 *(p+i)+ j 你就可以看成是 arr + j 了,就是指向上述数组第j个位子的指针,接着就是*号取值了
第2个回答  2012-03-01
//举例说明。
int a[2][3]={1,2,3,4,5,6};
int (*p)[3]=a; //p的类型与a相同,这儿表示p指向数组第一行。
printf("%d\n",*(*(p+1)+1)); //*(*(p+1)+1)等价于a[1][1],这儿的值为5。