数组指针的解读?求讨论!

铭毅天下
大数据领域优质创作者
博客专家认证
2012-09-26 02:16:48
int main()
{
int a[5][2] = {0,1,2,3,4,5,6,7,8,9};

int *p = a[0];
int (*p2)[2] = &a[1];
++p;
++p2;

printf("%d\n",*p);
printf("%d\n",**p2);
printf("%d \n",p2[1][2]); //如何解读?

return 0;
}
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
铭毅天下 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?6817
[/Quote]

很深入!
铭毅天下 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C/C++ code

int (*p2)[2] = &a[1];//p2指向a[1],*p2 = 2;
++p2;//p2指向a[2],*p2 = 4
printf("%d \n",p2[1][2]);//p2[1][2] 相当于p2 + 1,先指向a[3],然后&a[3] + 2,输出8
[/Quote]

很详细,谢谢!结合三楼的回复,好理解!
叁叁玖玖 2012-09-26
  • 打赏
  • 举报
回复
应该是

printf("%d \n",p2[1][2]);//p2[1][2] 相当于p2 + 1,先指向a[3],然后&a[3][0] + 2,输出8
叁叁玖玖 2012-09-26
  • 打赏
  • 举报
回复

int (*p2)[2] = &a[1];//p2指向a[1],*p2 = 2;
++p2;//p2指向a[2],*p2 = 4
printf("%d \n",p2[1][2]);//p2[1][2] 相当于p2 + 1,先指向a[3],然后&a[3] + 2,输出8
sublimepan 2012-09-26
  • 打赏
  • 举报
回复
printf("%d\n",*p); // p 是整型指针,初始指向元素0, 加1指向1
printf("%d\n",**p2); // p2是含2个元素的数组指针,初始指向元素2,该指针加1是向后移动2个数据,所以指向4
printf("%d \n",p2[1][2]);//同上,此时p2指向4,前一个下标1就是p2指针再加1指向6,后一个下标加2移动2个元素,指向了8
自信男孩 2012-09-26
  • 打赏
  • 举报
回复
printf("%d \n",p2[1][2]); 首先需要明白p2的含义,总的来说p2是一个一维指针,和普通的意味指针比如p1不同的地方时它指向的长度为2。(*p2)[2]和a是等价的。
iamnobody 2012-09-26
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?6817

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧