int a[5][5];
int(p)[5];
p=a;
那么为什么可以p[4][2]=(*(p+4)+2)(这里有两个星号,不知道为什么不显示,都在圆括号前面。
p是int*类型的指针 有点疑惑p[4]=*(p+4)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注引用 皆我百晓生 小程序回复内容作答:
你的思路有一点混淆了。
首先,p是一个int(*)[5]类型的指针,表示指向一个有5个int元素的数组的指针。也就是说,它可以指向一个二维数组a。
当你执行p = a;时,p指向了数组a的第一行。
接下来,当你执行p[4][2] = ((p+4)+2);时,实际上等价于a[4][2] = ((p+4)+2);。
p+4:根据p = a;,p指向a的第一行,所以p+4指向a的第五行。
(p+4)+2:根据(p+4)+2,我们从第五行向下移动了两行,所以它指向a的第七行。
((p+4)+2):因为((p+4)+2)是一个指针,所以它表示的是指向a的第七行的指针。
((p+4)+2)是一个指针,所以可以作为左值,你可以将其用于赋值操作和访问其元素。最后,p[4][2] = ((p+4)+2);表示将a的第七行的第三个元素的值赋给a的第五行的第三个元素。
简而言之,p[4][2] = ((p+4)+2);的含义是使用指针操作访问和修改二维数组a的元素。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报