1. 程式人生 > >C 語言中二維陣列指標詳解

C 語言中二維陣列指標詳解

C語言中,指標是一個複雜但又靈活多變的知識點,我們知道,在一維陣列中,對於一個數組a[],*a,a,&a,都表示a的首地址,但如果與二維陣列混合使用,就顯得更為複雜了。例如對於一個二維陣列

 a[2][4]={{1,2.3},{4,5,6}}

 a+i,&a[i],*(a+i),a[i],

這四個表示式到底表示什麼呢?

-----------------------------------------------------------------------------------------------------------------------------

先告訴答案吧,其實這幾個表示式都是指向同一個地址的,也許你會很詫異,也會很疑惑,怎麼會是這樣呢!!事實證明就是這樣的,


下面來一一道來。在二維陣列中,

指標指向分為兩個方向:行指向和列指向,儘管上面給出的都是指向同一個地址,但是表示式之間表示的含義還是有輕微的區別的:

其中 a+i 和 &a[i]表示指向行的地址,也就是說,這兩個表示式指向的地址是針對一行而言的,指向第i行的首地址,並沒有精確到某列元素的地址;而*(a+i),a[i]表示指向列的地址,具體的表示就已經精確到第i行0列這個元素的地址了,這個地址正好是第i行的首地址,所以出現了這幾個表示式都指向同一地址。同樣我們知道二維陣列中    *(a+i)+j   表示陣列元素中第i行j列的元素地址,即等價於&a[i][j],【同樣*(*(a+i)+j)表示的值就是a[i][j]的內容了】。所以很容易的得到 *(a+i)<=>*(a+i)+0

 即表示指向第i行0列的元素的地址,而"a[i]"整體就可以看作一個一維陣列,那麼這個一維陣列表示的就是首地址了,綜合起來就是第i行0列的元素的地址。