C語言中的多維數組與指針

最近學完了C語言指針的基本內容,開始學習多維數組與指針,寫下一點自己的學習心得。C語言中的多維數組指針是比較複雜的,需要多理解和多思考,先舉個例子,對於一個二維數組a,他有三行四列。如圖所示:

a[0]
1
3
5
7
a[1]
9
11
13
15
a[2]
17
19
21
23

可以看到這個數組包含了12個元素,一共有3行,4列,我們可以這樣看,這個二維數組是由3個一維數組所組成的,每個一維數組又包含了4個元素,a[0][0],a[0][1],a[0][2]

在一維數組中,a代表了數組的首元素地址,那麼在二維數組中,a代表了就是第0行的首地址,那麼第一行的首地址就是 a+1, 如果我們說第0行的首地址是2000,在Turbo C 中第1行的地址就是2008,因爲第0行有4個整型數據,他們在內存單元中佔據了4*2=8個內存單元,所以a+1的首地址就是2008那麼由此可以推導出,a+1就是a[1]的地址,同理可以推導出 a+2就是a[2]的首地址……

    a[0]  a[1]   a[2]是一維數組名,C語言規定 數組名代表數組首元素的地址,所以a[0]就是a[0][0]的地址,也就等於&a[0][0]   a[1]=&a[1][0]    a[2]=&a[2][0]

 那麼  第0行1列的元素地址怎麼表示呢? a[0]這個一維數組名代表的是第0行的首地址,注意,a代表的是列的首地址,而a[0]則代表的是行的首地址,如果說第1行是a+1,那麼第一列就是a[0]+1,以此類推……  因爲a指向的是a[0]的地址。所以a其實是一個指針變量,他存放的是a[0]的地址,然而a[0]則存放的是a[0][0]的首地址,那麼前面已經知道,*a等於a[0],因爲a中存放的是a[0]所在的地址,那麼我們要求a[0][0]的地址就應該是* *a,或者*a[0]也就是說,這個指針其實有兩個指向。請看圖:

  看圖應該就很清楚了,寫到這裏,如有錯誤望各位前輩請多多指教微笑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章