二維數組中數組名與其指針的關系


大多數初學者不是很清楚二維數組是個怎樣的存在,今天我就來說說這個二維數組,計算機內存是一連串的存儲單元,我們可以把它理解成一條線,沒錯就是一條線,那么問題來了,二維是個怎樣的存在呢???說白了,二維數組並不真是二維,只是人們主觀的將它變成二維,舉個例子吧!比如樓梯,我們都知道樓梯說白了就是一條路,但是我們刻意將樓梯來回上升的方式,這都是我們主觀的改變,實際上我們可以看成是一個直路,只是被工人弄彎了。好了,不扯了,進入主題。。。。

二維數組名a是數組第一行的指針,它指向的是一整行,*a才是a[0][0]的地址,數組名a是一整行地址,*a是一個元素的地址,但此時p=a,這個p卻是a[0][0]的地址看下面的程序

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int a[2][3]={1,2,3,4,5,6},*p;
 6     
 7     p=a;
 8     
 9     printf("%d %d %d\n",p,a,*a);
10     
11     return 0;
12 }

結果顯示

第一行的地址和第一個元素首地址肯定相同,我們繼續看

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int a[2][3]={1,2,3,4,5,6},*p;
 6     
 7     p=a;
 8     
 9     printf("%d %d\n",(p+1),*(a+1));
10     
11     return 0;
12 }

結果顯示,可以看出,地址差異出來了,第0行的地址為6487600,所以a[0][1]就是6487604,而第一行的地址為6487612,第0行和第1行是不是相差了3個int型字節,所以這就證明了a是數組第一行的指針,它指向的是一整行,p指向的是一個元素

繼續證明

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int a[2][3]={1,2,3,4,5,6},*p;
 6     
 7     p=a;
 8     
 9     printf("%d %d\n",*(p+1),**(a+1));
10     
11     return 0;
12 }

結果

 

結論:**a才表示a[0][0],*a表示a[0][0]的地址,a表示第一行的地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM