簡體   English   中英

將多維數組傳遞給C ++中的函數

[英]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]不同,后者意味着ay 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM