二維數組的指針


首先,定義一個二維數組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]。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM