int array[2][2] = , };
這個二維陣列裡包含了兩個一維陣列,分別是,,這個好理解,但是對於array和array + 1這兩種寫法,該怎麼理解呢?這篇文章我就說說我自己的心得吧。
#include //編譯器名: tdm-gcc 4.9.2 32-bit release
//執行平台:windows xp 32bit
int main(void)
, };
printf("array的值是%p, array + 1的值是%p\n", (void *)array, (void *)
(array + 1));
printf("array[0][0]的位址是%p, array[1][0]的位址是%p\n", (void *)
(&array[0][0]), (void *)(&array[1][0]));
return 0;
}
執行結果如下:
從執行結果可以看到,array的輸出值是,array + 1的輸出值是,兩者相差了8個位元組。
對於二維陣列array這個名字,一般的教材告訴我們,array是第乙個元素的位址。怎麼來理解這句話呢?
如果從我們人腦的角度來理解array,最形象的理解就是array是乙個大集合,它包含了4個數字:1、2、3、4。用乙個圖來表示,就像這樣子:
也就是說,電腦會認為array的基本單位是一維陣列,而不是乙個個具體的數字,理解這個很重要。那麼再回過頭來看教材的這句話「二維陣列名array是第乙個元素的位址」,現在電腦認為array的元素是一維陣列,那麼第乙個元素就是第乙個一維陣列,第乙個元素的位址就是第乙個一維陣列的位址。
同裡,對於array + 1,由於電腦認為array的元素是一維陣列,那麼array + 1就是第二個元素的位址。千萬不要認為array + 1就跑到數字「2」去了。記住,電腦處理array是按照一位陣列為單位處理的,不是按照單個數字1、2、3、4來處理的,所以我說電腦認為array的基本單位是一維陣列這句話很重要。而且從執行結果來看,array + 1的值與array相差了8個位元組,也說明了array移動是以一維陣列為單位移動的。
第1點中,我說過array是第乙個元素的位址,而第乙個元素是乙個一維陣列,那麼array的值就是這個一維陣列的位址。那麼的位址是多少呢?當然不是「1」的位址就是「2」的位址咯,你不會拿「2」的位址來作為一維陣列的位址吧?現在就恍然大悟了,一維陣列的位址就是首元素「1」的位址,那麼array的值也就是&array[0][0]的位址啦,跟執行結果一樣!
同裡,array + 1的值是第二個元素的位址,而第二個元素是一維陣列,而一維陣列的位址是首元素「3」的位址,所以array + 1的值就是&array[0][0]。
本文這是我對array和array + 1的意思的一點心得。文字描述沒有教材上那麼嚴謹,因為嚴謹了不利於理解抽象的概念。
關於二維陣列還有一些寫法,像arrya[0],array,array[0]等等,這些寫法又代表什麼意思,待續!
C語言二維陣列
int main int argc,const char argv int array 5 建立乙個二維陣列 型別修飾符陣列名 包含幾個小陣列 每個小陣列有多少個元素 初始值如何寫?int array 3 4 一維陣列可以省略元素個數,二維陣列只能省略第一位 第乙個 3 可以不寫 第二種初始值寫法 ...
C語言 二維陣列
c語言之二維陣列 1 定義的基本格式 int a 1 2 1代表一行,2代表二列 難點 二維陣列的行列下標。字串結束標誌的實用。2 一維陣列和二維陣列的聯絡。一維陣列如同千層面一樣一層一層的,而二維陣列,只是給千層面切了幾刀 3 int a 2 3 a 0 0 是1,a 0 1 是2,a 0 2 是...
C語言 二維陣列
1 陣列名稱不可以代表儲存區 2 陣列名稱可以代表陣列裡第乙個儲存區的位址 3 可以對陣列名稱進行sizeof計算,結果是陣列裡所有儲存區的總大小 4 c99規範裡可以使用變長陣列,宣告變長陣列的時候可以用變數表示陣列裡的儲存區個數 5 某一次程式執行過程中變長陣列裡儲存區個數不會變化 6 如果程式...