編譯:傳遞一個指針的指針用C
#include <stdlib.h>
void f(int ** v)
{
}
int main()
{
int v[2][3];
f(v);
return 0;
}
失敗:
g.cpp:13:8: error: cannot convert ‘int (*)[3]’ to ‘int**’ for argument ‘1’ to ‘void f(int**)’
但通過了以下變化:
#include <stdlib.h>
void f(int ** v)
{
}
int main()
{
int * v[2];
f(v);
return 0;
}
這在我看來,更深一個數組的維度必須在編譯時解決,有人可以詳細說明它嗎?
前者不是指向指針的指針,而是2D數組(它將衰減爲指向數組的指針)。數組不是指針。 – netcoder
[在C中傳遞多維數組作爲函數參數](http://stackoverflow.com/questions/4051/passing-multidimensional-arrays-as-function-arguments-in-c)或[爲什麼不能我將一個二維數組轉換爲C中的二維指針?](http://stackoverflow.com/questions/8264392/why-cant-i-convert-a-two-dimensional-array-toa-a-二維指針在c),或許多其他。 – netcoder
[我的編譯器抱怨,當我將一個二維數組傳遞給期望指向指針的函數](http://c-faq.com/aryptr/pass2dary.html)爲什麼這個C標記的問題有一個C++例? – effeffe