1. 程式人生 > >c語言二維陣列的下標運算與指標偏移

c語言二維陣列的下標運算與指標偏移

首先,定義一個二維陣列int Array[y][x];

    一、 對於二維陣列的指標偏移的運演算法則。同一維陣列一樣,二維陣列的陣列名也是指向第一個陣列元素的(即Array等於&Array[0][0]),且二維陣列的陣列元素在計算機內的記憶體存放也是連續的,但不一樣的是:Array+1的值不是&Array[0][1],而是&Array[1][0](即,對於二維陣列Array[][x],指標Array+1中的1表示的位元組數是sizeof(int)*x,而不是sizeof(int),若要表示Array[i][l]的地址,應該是 *(Array+i)+l,要復引用a[i][l],則應該是*(*(Array+i)+l)。

      但是注意,同一、二維陣列名一樣,雖然Array+1的值等於第二行第一個元素的地址,但是使用指標運算子引用  *(Array+1)得到值依然只是一個地址。

     二、指向二維陣列的指標。

     如果建立一個這樣的指標  int *ptr=Array  ,則對ptr的指標和下標運算和指向一維陣列一樣。對於Array這個二行三列的二維陣列來說,ptr[i*x+l]表示的是第i行第l列的元素,因為二維陣列的元素在記憶體中實際上也是線性存放的,所以ptr[i*x+l]訪問到的第i*x+l個元素就是第i行第l列的元素(雖然編譯器會報錯)。另外對於這個指標不能採用ptr[i][l]的雙下標運算,即使它指向一個二維陣列。

     如果建立一個這樣的指標  int(*ptr)[3]=Array  (表示建立一個指向有三列的二維陣列的指標),則可以採用雙下標運算ptr[i][l],或者*(*(ptr+i)+l),這都等效於Array[i][l]。