0

次のような 3 x 3 の 2 次元配列を作成したい:

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}} を使用して 2 次元配列を直接設定できる方法があれば、

前もって感謝します。

4

2 に答える 2

1

のようなリストを使用する場合は{{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));
}
于 2012-04-04T06:11:10.627 に答える
-1

ジャグ配列が不要で、サイズが設計時にわかっている場合は、次の構文を使用して宣言できます。

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];
于 2012-04-04T02:22:57.337 に答える