array是陰性陽性 array是什么意思


array是陰性陽性 array是什么意思

文章插圖
本文原創,轉發請著名作者和來源 。
最近在研究C語言二維數組,發現如果單獨理解數組名的Array的含義,還真不太好理解 。比如現在有一個C語言二維數組:
int Array[2][2] = { {1, 2}, {3, 4} };
這個二維數組里包含了兩個一維數組,分別是{1,2},{3,4},這個好理解,但是對于Array和Array + 1這兩種寫法,該怎么理解呢?這篇文章我就說說我自己的心得吧 。
先上一段簡單的C語言代碼:
#include
//編譯器名: TDM-GCC 4.9.2 32-bit Release
//運行平臺:windows xp 32bit
int main(void)
{
int Array[2][2] = { {1, 2}, {3, 4} };
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個字節 。
1.理解C語言二維數組名:Array
對于二維數組Array這個名字,一般的C語言教材告訴我們,Array是第一個元素的地址 。怎么來理解這句話呢?
如果從我們人腦的角度來理解Array,最形象的理解就是Array是一個大集合,它包含了4個數字:1、2、3、4 。用一個圖來表示,就像這樣子:
但是計算機可不會像我們人腦來看待Array 。從計算機自己的角度來看,它會看到Array標記的內存地址段里有兩個一維數組,卻看不到每個一維數組里的數字 。用一個圖來表示,就像這樣子:
也就是說,計算機會認為Array的基本單位是一維數組,而不是一個個具體的數字,理解這個很重要 。那么再回過頭來看C語言教材的這句話“二維數組名Array是第一個元素的地址”,現在計算機認為Array的元素是一維數組,那么第一個元素就是第一個一維數組{1,2},第一個元素的地址就是第一個一維數組{1,2}的地址 。
同里,對于Array + 1,由于計算機認為Array的元素是一維數組,那么Array + 1就是第二個元素{3,4}的地址 。千萬不要認為Array + 1就跑到數字“2”去了 。記住,計算機處理Array是按照一位數組為單位處理的,不是按照單個數字1、2、3、4來處理的,所以我說計算機認為Array的基本單位是一維數組這句話很重要 。而且從運行結果來看,Array + 1的值與Array相差了8個字節,也說明了Array移動是以一維數組為單位移動的 。
歡迎本人微博與:C語言編程技術分享
2.計算Array的值
第1點中,我說過Array是第一個元素的地址,而第一個元素是一個一維數組{1,2},那么Array的值就是{1,2}這個一維數組的地址 。那么{1,2}的地址是多少呢?當然不是“1”的地址就是“2”的地址咯,你不會拿“2”的地址來作為一維數組{1,2}的地址吧?現在就恍然大悟了,一維數組{1,2}的地址就是首元素“1”的地址,那么Array的值也就是&Array[0][0]的地址啦,跟運行結果一樣!
同里,Array + 1的值是第二個元素的地址,而第二個元素是一維數組{3,4},而一維數組{3,4}的地址是首元素“3”的地址,所以Array + 1的值就是&Array[0][0] 。
3.總結
本文這是我對Array和Array + 1的意思的一點心得 。文字描述沒有C語言教材上那么嚴謹,因為嚴謹了不利于理解抽象的概念 。
【array是陰性陽性 array是什么意思】關于二維數組還有一些寫法,像Arrya[0],*Array,*Array[0]等等,這些寫法又代表什么意思,待續!

    推薦閱讀