1.傳遞陣列指標
1 #include 2void output( int (*pa)[3], int n )//
這個函式只能輸出n行3列的二維陣列310
}11void
main()12,
15
16};
17 output(a,2
);18 }
2.傳遞「指標陣列」 先將二維陣列的行指標儲存到乙個指標陣列中,再將指標陣列傳遞到子函式中去
1 #include 2void output( int *pa, int row,int col ) //
這個函式更通用,但呼叫前,要做好準備工作。310
}11void
main()12,
15
16};
17int
i;18
int *pa[2
];19
for( i=0;i<2;i++)
20 pa[i]=a[i];
21 output(pa, 2, 3
);22 }
對於二維陣列作為變數存在於函式中,有如下情況:
void func(int array[3][10]);void func(int array[10]);
void func(int(*array)[10]);
p + i*n + j;void func(int array[3][10]);
void func(int array[10]);
變為:
void func(int **array, int m, int n);
在轉變後的函式中,array[i][j]這樣的式子是不對的(不信,大家可以試一下),因為編譯器不能正確的為它定址,
所以我們需要模仿編譯器的行為把array[i][j]這樣的式子手工轉變為:
*((int*)array + n*i + j);
在呼叫這樣的函式的時候,需要注意一下,如下面的例子:
int a[3][3] =
, ,
}; func(a, 3, 3);
根據不同編譯器不同的設定,可能出現warning 或者error,可以進行強制轉換如下呼叫:
func((int**)a, 3, 3);
陣列指標,指標陣列,二維陣列之間的對比
首先解釋幾個概念 1.陣列指標,即指向陣列的指標。其本身是乙個指標變數,變數中儲存的值是乙個陣列的起始位址。int p 10 畫圖畫圖 這樣一種結構,變數中儲存的使陣列的開始位址。所以,我們就可以像下面這樣寫 int a 10 陣列名就表示陣列的首位址,所以可以直接賦值 int p 10 a for...
指標 陣列 函式之間的聯絡
指標陣列 定義 int p n 1.優先順序高,先與p結合成為乙個陣列,2.再由int 說明這是乙個整型指標陣列,3.它有n個指標型別的陣列元素。陣列指標 定義 int p n 1.優先順序高,首先說明p是乙個指標,2.指向乙個整型的一維陣列,3.執行p 1時,p要跨過n個整型資料的長度 總結 陣列...
二維陣列 二維陣列和指標
include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...