int arr[5] ; int (*p)[5] = &arr; 为什么*p得到的是arr的地址?
int arr[5] = {1,2,3,4,5};
int (*p)[5] = &arr;
printf("p:%p\n",p);
printf("*p:%p\n",*p);
结果是 p = *p = arr = 0x7ffee517c830
问题就是 *pa 为什么是一个地址。pa 是定义为 int (*pa)[SIZE],它指向一个数组,这里到底指向的是数组的第一个元素,还是指向整个数组一个无形的保护壳。但*pa 是int [SIZE] 类型的,理论上它应该是一个数组类型,所以pa指向的是一个数组(废话),关键是不是指向数组的第一个元素,如果是的话,按照解引用操作的话,它应该是取出pa里面的地址,然后再到这个地址中取出那个值。那也应该取出1来了啊。
到底是怎么回事?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你就可以理解成 *p 是 arr 的别名,也就是 p 的值等于 &arr。
所以你想要通过 p 获取数组的值,需要
*(*p)
,这是第一个元素,第二个元素*(*p + 1)
以此类推。