C++多維數組作爲函數參數該怎麼寫?

衆所周知,函數參數中一維數組的長度會被忽略的,但二維數組的第二維度就會被要求指定長度(否則gcc會報告“數組元素的類型不完全”)。這很好理解,它是爲了讓函數知道矩陣的寬度。同理,三維數組就會被要求指定第二維度和第三維度的長度,所以n維數組只有第一維度的長度會被忽略。那麼對於C++而言,如何將多維數組作爲參數向函數中進行傳遞呢?本文就爲大家總結一下C++多維數組作爲函數參數的幾種方式。

函數原型:正確例(有不妥,非錯誤)
直接傳遞元素個數也不妥當,只能處理固定元素個數的數組,應用場合十分受限

void PrintTwoDimensinalArray( int a[8][8], unsigned int m, unsigned int n );

函數原型:錯誤例
不能每維都不傳遞元素個數,語法規則不允許

void PrintTwoDimensinalArray( int a[][], unsigned int m, unsigned int n );

函數原型:正確例(有不妥,非錯誤)
a 爲指向數組基地址的整數指針,m 爲第一維元素個數,n 爲第二維元素個數,函數內部使用指針運算訪問某個元素

void PrintTwoDimensinalArray( int * a, unsigned int m, unsigned int n );
如:第 i 行 j 列元素,使用指針運算 a + n * i + j 的結果指針指向 <最後這種方式需要考慮一個問題,表示二維數組中的元素已經非常苦難,那麼三維、四維...呢?>

不過目前而言,第一種和第三種是正確的,雖然有不妥當,但是卻是編程時實現的選擇方式。

以下是使用第三種表示方式寫的代碼用例,感興趣的小夥伴可以參考一下:

//  函數定義
void PrintTwoDimensinalArray(int * a, unsigned int m, unsigned int n)
{
  unsigned int i, j;
  for( i = 0; i < m; i++ )
    for( j = 0; j < n; j++ )
      cout << *(a + n * i + j) << "; ";
}

//  函數調用
int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
PrintTwoDimensinalArray( a, 2, 3 );


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章