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 );


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