首先,定義一個二維數(shù)組int Array[y][x];
????一、?對于二維數(shù)組的指針偏移的運算法則。同一維數(shù)組一樣,二維數(shù)組的數(shù)組名也是指向第一個數(shù)組元素的(即Array等于&Array[0][0]),且二維數(shù)組的數(shù)組元素在計算機內的內存存放也是連續(xù)的,但不一樣的是:Array+1的值不是&Array[0][1],而是&Array[1][0](即,對于二維數(shù)組Array[][x],指針Array+1中的1表示的字節(jié)數(shù)是sizeof(int)*x,而不是sizeof(int),若要表示Array[i][l]的地址,應該是 *(Array+i)+l,要復引用a[i][l],則應該是*(*(Array+i)+l)。
????? 但是注意,同一、二維數(shù)組名一樣,雖然Array+1的值等于第二行第一個元素的地址,但是使用指針運算符引用? *(Array+1)得到值依然只是一個地址。
???? 二、指向二維數(shù)組的指針。
???? 如果建立一個這樣的指針? int *ptr=Array? ,則對ptr的指針和下標運算和指向一維數(shù)組一樣。對于Array這個二行三列的二維數(shù)組來說,ptr[i*x+l]表示的是第i行第l列的元素,因為二維數(shù)組的元素在內存中實際上也是線性存放的,所以ptr[i*x+l]訪問到的第i*x+l個元素就是第i行第l列的元素(雖然編譯器會報錯)。另外對于這個指針不能采用ptr[i][l]的雙下標運算,即使它指向一個二維數(shù)組。
???? 如果建立一個這樣的指針? int(*ptr)[3]=Array? (表示建立一個指向有三列的二維數(shù)組的指針),則可以采用雙下標運算ptr[i][l],或者*(*(ptr+i)+l),這都等效于Array[i][l]。