c语言中如(*P)[3]如果出现这*(*(P+i)+j)两个*是什么意思啊,求解啊
3个回答
展开全部
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),对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)不就是取该首地址的值吗
展开全部
我们这样来看
int arr[3] 这是一个大小为3的整型数组
那么
int (*p)[3] 这就是一个指向上述数组的指针
所以p+i也是一个指向上述数组的指针,即 *(p+i) 和上述数组是同类型的
那么 *(p+i)+ j 你就可以看成是 arr + j 了,就是指向上述数组第j个位子的指针,接着就是*号取值了
int arr[3] 这是一个大小为3的整型数组
那么
int (*p)[3] 这就是一个指向上述数组的指针
所以p+i也是一个指向上述数组的指针,即 *(p+i) 和上述数组是同类型的
那么 *(p+i)+ j 你就可以看成是 arr + j 了,就是指向上述数组第j个位子的指针,接着就是*号取值了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//举例说明。
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。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询