[英]Passing multidimensional arrays to functions in C++
我目前正在閱讀有關C ++的教程,其中指出以下內容:
當傳遞更高維度的數組時,只有第一個維度可以打開,而在編譯過程中必須知道其他維度。
我對此需要進一步的解釋。 當將一維數組( int a[]
)傳遞給某些函數f()
該數組會衰減為指針int* a
。 我假設上面的語句暗示一個2D數組,例如int a[][]
衰減為int *a[]
或者說只有第一維可以動態分配(這是無稽之談)。 具體來說,“只有第一維可以打開”是什么意思? 這些是我能提出的僅有的兩種解釋。
作者說如果數組是int a[5][10]
並且您想將該數組傳遞給某個函數,那么在函數聲明中,您將接受該數組的參數編寫為int x[][10]
甚至該參數,即int x[][10]
衰減為int (*x)[10]
無論如何,傳遞2D數組的好方法是:
template<typename T, int first,int second>
void someFunction(T (&array)[first][second])
{....}
我假設上面的語句暗示一個二維數組,例如int a [] []衰減為int * a []
int a[x][y]
衰減為int (*a)[y]
即a
是指向y
ints數組的指針,這與int *a[y]
不同,后者意味着a
是y
int指針數組。
例如,如果您有一個二維數組
int a[M][N];
然后在表達式中使用,例如在參數表達式中使用,如果相應的函數參數不是引用,則將其隱式轉換為指向其第一個元素int ( * )[N]
指針。
所以例如你可以寫
int ( *p )[N] = a;
您可以通過以下方式想象它。
如果你有一個數組
T a[M};
然后它會在表達式中隱式轉換,很少有例外指向它的第一個元素T *
指針。
如果您有一個二維數組
int a[M][N];
您可以用以下方式表示它
typedef int T[N];
T a[M];
所以指針看起來像
T *p = a;
其中類型T是一維數組int [N]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.