C 語言中二維陣列指標詳解
阿新 • • 發佈:2019-02-08
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