如何在C++中动态分配全局二维数组

How to dynamic assign a global 2d array in C++

本文关键字:动态分配 全局 二维数组 C++      更新时间:2023-10-16

我想制作一个2d,3乘3的数组,如下所示:

double *array;
void setArray(double x, double y, double z){
    array = {{x,0,0},
             {0,y,0},
             {0,0,z}};
}

我读到一些帖子建议这样做:

double **array = new double*[3];
void setArray(double x, double y, double z){
   array[0] = new double*[3];
   array[0][0] = x;
   array[0][1] = 0;
   array[0][2] = 0;
   ...

如果有任何方法,我可以直接使用值{{x,0,0},{0,y,0},{0,0,z}设置2d数组?

提前谢谢。

如果你想使用像{{x,0,0},{0,y,0},{0,0,z}}这样的列表,你应该使用硬编码大小的数组:

double *array; // no good
double array[3][3]; // OK

填写复印件:

void setArray(double x, double y, double z){
    double temp[3][3] = {{x,0,0},
                         {0,y,0},
                         {0,0,z}};
    memcpy(&array, &temp, sizeof(array));
}

如果您不需要锯齿状数组,并且在设计时大小已知,则可以使用以下语法声明它:

double array[3][3];

然而,如果你想使用初始化列表,你可以这样做:

typedef double Array[3][3];
Array& array(double x = 0.0, double y = 0.0, double z = 0.0) {
  static double array_[3][3] = {{x,0,0},{0,y,0},{0,0,z}};
  return array_;
}
// init:
array(4,5,8);
// access:
array()[0,2];