如何在c ++中的函数原型中编写多维数组

时间:2014-05-04 05:36:51

标签: c++ multidimensional-array prototype

当我创建一个像value [] []的多维数组时,将它传递给函数。但我对如何为这个函数编写原型感到很困惑,因为有一个错误信息如:

   error: declaration of 'value' as multidimensional array must have bounds for all dimensions except the first|


   //function prototype;
  void matrix(double s[],int j,int n,double value[][],double alpha[], double beta[], double gamma[]);
  //function
   void matrix(double s[],int j,int n,double value[][],double alpha[], double beta[],double gamma[]){...}

帮助,如何正确编写?

3 个答案:

答案 0 :(得分:1)

编译器已经告诉过你了 错误:声明'value'作为多维数组必须具有除第一个|

之外的所有维度的边界

你需要指定长度,例如:double s [3],double [3] [3]等。

答案 1 :(得分:1)

来自编译器的错误消息非常有说服力。参数double value[][]需要更改为double vale[][N],其中N是整数。例子:

double value[][20] // A matrix in which each row has 20 columns.
double value[][10] // A matrix in which each row has 10 columns.

答案 2 :(得分:0)

上面的人已经给出了技术解释。

背后的原因是C和C ++将数组视为内存块。当一个数组传递给一个函数时,所有发送的都是一个指向该数组的指针。这与Ada,Pascal和Fortran形成鲜明对比,它将数组的描述符发送给函数。

您的声明必须提供足够的信息,只需传递指针即可使用数组。这意味着需要除最后一个(第一个指定的)数组维度以外的所有维度。

可变大小的多维数组通常是糟糕设计的标志。如果你有一个固定的数组大小(在3D变换中常见4x4),那么2D数组效果很好。对于像通用矩阵操作这样的东西,2D数组不能很好地工作。

为此您需要定义一个类: 1)管理一维阵列 2)提供将2D引用转换为1D索引的机制。

你会做的是

class Matrix 
{
  unsigned int range1 ;
  unsigned int range2
  double *values ; // Could use a template

  double &valueAt (unsigned int x, unsigned int y) { return values [range1 * x + y] ; }
} ;