关于二维数组,为什么两个输出不一样?

miludeyingxiong 2013-07-05 06:06:52
各位朋友,
代码如下:
int main()
{
int a[4][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
int (*p)[5];
p = a;
for(int i = 0; i < 4; i++)
{
p = a + i; //当改为 p = p + i 时,输出有误。
for(int j = 0; j < 5; j++)
{
cout<<*(*p + j)<<" ";
}
cout<<endl;
}
}

在我的电脑上,用eclipse编译,正常输出结果为:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

当将p = a + i; //当改为 p = p + i 时,输出有误,输出结果为:
1 2 3 4 5
6 7 8 9 10
16 17 18 19 20
4198585 1 8065296 8067040 -1

这是为什么呀?
...全文
236 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
miludeyingxiong 2013-07-05
  • 打赏
  • 举报
回复
傻了,原来是当改为 p = p + i 时,实际上加了多次。
程序猿Theg 2013-07-05
  • 打赏
  • 举报
回复
第一个是正确的,但是把p=a+i;改成p=p+i时显然就不正确了,因为p也在不断地变化,每次的p比上次大1,所以再在p的基础上+i肯定就会往后移了。
橡木疙瘩 2013-07-05
  • 打赏
  • 举报
回复
p = p + i已经把p改变了,而a是不变的。 p = p + i第一次相当于p = a + i; p = p + i第二次,相当于p = p + i + i p = p + i第三次,相当于p = p + i + i + i; …… 纠正一个概念:a是二维数,但p不是,p是“指向一维数组的指针”。C允许用指针来访问数组,但指针不是数组。 用指针来访问数组时,可以用访问数组的方法: p = p + i这句去掉,然后输出语句改为: cout<<p[i][j]<<" "; 也可以用指针的迭代功能: p = p + i 改为p = p + 1或p ++,后面不变。
starytx 2013-07-05
  • 打赏
  • 举报
回复
a是个固定值,而p是不断变化的 p = a+i; 和 p = p+i;显然不是一回事

64,670

社区成员

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

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