C語言中的多維數組(2)

上次說到C語言的多維數組中a[0][1]的地址表示方法爲a[0]+1,那麼我們要得到a[0][1]的值,怎麼表示呢??那麼就是*(a[0]+1),假設,a[0][1]中存放的數字爲10,那麼*(a[0]+1)=10,前面提到 a+0等於a[0]的首地址,a+1就等於a[1]的首地址,那麼,*(a+0)就等於a[0][0]的首地址,就等於a[0],注意,這裏的a[0]是一個地址,他代表a[0][0]的首地址,也就是列,所以我們要得到a[0][1]的地址,就要讓a[0]+1,(請讀者注意地址和值的區別),那麼我們知道了a[0][1]的地址是a[0]+1,那麼我們要知道a[0][1]的值就是*(a[0]+1),指向這個地址,就是a[0][1]的值。下面作圖,能夠讓讀者更清晰的瞭解:

表示形式
含義
地址
a
二維數組名,指向一維數組a[0],即第0行的首地址
2000
a[0],*(a+0),*a
0行0列元素的地址
2000
a+1,&a[1]
1行元素的首地址
2008
a[1],*(a+1)
1行0列元素 a[1][0]的地址
2008
a[1]+2,*(a+1)+2,&a[1][2]
1行2列元素 a[1][2]的地址
2012
*(a[1]+2),*(*(a+1)+2),a[1][2]
1行2列元素 a[1][2]的值
元素值13
解釋一下,爲什麼a+1和*(a+1)都是2008,可能有疑問,既然a+1是地址,而*(a+1)是內容,爲什麼他們的值是一樣的呢??答案是,雖然a+1和*(a+1)的值是一樣的,但是他們的指向是不同的,我們知道,a+1的值是行的首地址,而*(a+1)=a[1],是列的首地址。雖然他們的值是一樣的,但是他們的指向是不同的,a代表的是行的首地址,所以a+1就是一行一行往下,然而我們如果要求列的首地址,就要*(a+1),雖然他們的地址一樣,但是指向確是不同的,大家請看圖片:

如果有疑問,歡迎共同交流,本文如有錯誤,歡迎批評指正!


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