首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于二维数组,为啥两个输出不一样

2013-07-08 
关于二维数组,为什么两个输出不一样?各位朋友,代码如下:int main(){int a[4][5] {{1,2,3,4,5},{6,7,8,9,

关于二维数组,为什么两个输出不一样?
各位朋友,
代码如下:
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 

这是为什么呀? 二维数组
[解决办法]
a是个固定值,而p是不断变化的
p = a+i; 和 p = p+i;显然不是一回事
[解决办法]
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 ++,后面不变。
[解决办法]
第一个是正确的,但是把p=a+i;改成p=p+i时显然就不正确了,因为p也在不断地变化,每次的p比上次大1,所以再在p的基础上+i肯定就会往后移了。

热点排行