everyone。C語言指針:int ** Vs. int(* g)[]
我使用Visual Studio 2013(C++)和限定在主功能的2D陣列:
int _tmain(int argc, char **argv)
{
int g[3][3] = { { 1, 2, 3, }, { 4, 5, 6, }, { 7, 8, 9, }, };
...
return 0;
}
然後,我定義的函數在定義1:
定義1:
void print_array(int **arr, int kx, int ky)
{
for (int i = 0; i < kx; i++) {
for (int j = 0; j < ky; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
我想從主要功能調用此功能:
int _tmain(int argc, char **argv)
{
int g[3][3] = { { 1, 2, 3, }, { 4, 5, 6, }, { 7, 8, 9, }, };
print_array(g, 3, 3);
return 0;
}
Visual Studio的告訴我說:
Error 1 error C2664: 'void print_array(int **,int,int)' : cannot convert argument 1 from 'int [3][3]' to 'int **'
我也知道另一種定義方法:
定義2
void print_array(int (*arr)[3], int kx, int ky)
{
for (int i = 0; i < kx; i++) {
for (int j = 0; j < ky; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
現在,它的工作原理。
我的問題是:在我之前他們(定義1和定義2)都在舊編譯器中工作,名爲你可以正確地將數組名稱作爲int **
或int (*p) []
傳遞給另一個函數。但是,在Visual Studio C++中,它不是。 Visual Studio C++比其他編譯器更嚴格嗎?或者我做錯了什麼?
非常感謝!
數組不是指針。指針不是數組。 – EOF
「*您可以將數組名稱作爲int **或int(* p)[]'*」傳遞,您可能沒有啓用它,或者簡單地忽略其他「* old *」編譯器的警告。 *或*你的記憶在欺騙你; ;-) – alk
可能的重複[爲什麼我們不能用雙指針來表示二維數組?](https://stackoverflow.com/questions/4470950/why-我們使用雙指針來表示二維數組) –