關於二維數組,為什么兩個輸出不一樣?


各位朋友,
代碼如下:
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 

這是為什么呀?

4 个解决方案

#1


a是個固定值,而p是不斷變化的
p = a+i; 和 p = p+i;顯然不是一回事

#2


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 ++,后面不變。

#3


第一個是正確的,但是把p=a+i;改成p=p+i時顯然就不正確了,因為p也在不斷地變化,每次的p比上次大1,所以再在p的基礎上+i肯定就會往后移了。

#4


傻了,原來是當改為 p = p + i 時,實際上加了多次。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: