對於一位陣列我們認識到其資料元素在記憶體中是按線性順序依次排列的,且一維陣列名的值是乙個指標常量。那麼二維陣列在記憶體中又是怎麼儲存的,其陣列名又有什麼含義呢?
定義乙個二維陣列:
int arr [3] [4] = ,,,};
我們可以將乙個二維陣列看做是乙個其中元素為陣列的乙個一位陣列,也就是說二維陣列第一維的元素實際上是另乙個陣列。所以陣列名arr是乙個指向乙個包含有4個整形元素的陣列的指標,即陣列指標常量;
在了解到二維陣列的陣列名是陣列指標常量後可對以下**作出分析:
int main()
; printf("sizeof(a) = %d\n",sizeof(a));
//當a單獨出現在sizeof()中時表示整個陣列,記憶體佔用量為48byte;
printf("sizeof(a[0][0]) = %d\n",sizeof(a[0][0]));
//a[0][0]表示二維陣列的第乙個元素,記憶體佔用量為4byte;
printf("sizeof(a[0]) = %d\n",sizeof(a[0]));
//a[0]相當於二維陣列中第一維陣列的陣列名,即第一行的所有內容,佔16byte;
printf("sizeof(a[0]+1) = %d\n",sizeof(a[0]+1));
//表示第二行的所有內容,記憶體佔用量為4byte;
printf("sizeof(a+1) = %d\n",sizeof(a+1));
//陣列名並非單獨出現在sizeof()中,故表示式表示陣列指標常量+1,佔4byte;
printf("sizeof(*a) = %d\n",sizeof(*a));
//a表示陣列指標常量,對其解引用結果為第一行的所有內容,佔16byte;
printf("sizeof(a[3]) = %d\n",sizeof(a[3]));
//sizeof()內部的表示式並不進行計算,所以此時的3無效,表示的二維陣列一行的內容。
心得:a[0] 單獨放在 sizeof 中 相當於 一維陣列名,求包含元素長度。。a[0]+1 則可以理解成 指標常量+1 相當於一維陣列名+1(退化成指標)
二維陣列名 二維陣列名取位址 二級指標
先給出結論,便於以後查閱 首先給出幾個定義 typedef int p1x4 4 定義資料型別,p1x4這種型別為指向含4個int元素的1維陣列的指標 typedef int p3x4 3 4 定義資料型別,p3x4這種型別為指向含3x4個int元素的2維陣列的指標 下面從一維陣列說起 定義 int...
C語言二維陣列專題 理解二維陣列名
int array 2 2 這個二維陣列裡包含了兩個一維陣列,分別是,這個好理解,但是對於array和array 1這兩種寫法,該怎麼理解呢?這篇文章我就說說我自己的心得吧。include 編譯器名 tdm gcc 4.9.2 32 bit release 執行平台 windows xp 32bit...
二維陣列名的本質
本人是乙個c語言小白,二維陣列名到底是啥?一直困擾著我,不過現在我想通了。現在把我的心得分享給大家 定義乙個2行3列的二維陣列 int a 2 3 二維陣列名a不用說肯定是乙個指標,我們知道一維陣列名是乙個指向首元素的指標,我們是通過指標步長來判斷的 即 指標進行 1所跳過的位元組數 那麼二維陣列名...