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



当我创建一个多维数组,如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[]){...}

help,如何正确书写?

来自编译器的错误消息非常有说服力。参数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.

编译器已经告诉你了错误:将'value'声明为多维数组必须对除第一个维度之外的所有维度都有边界|

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

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

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

声明必须提供足够的信息来处理仅传递一个指针的数组。这意味着除了最后一个(第一个指定的)数组维度之外,它需要所有的数组维度。

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

你需要定义一个这样的类:1)管理一个1D阵列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] ; }
} ;

相关内容

  • 没有找到相关文章

最新更新