2012-04-04 183 views
0

我想打一個2D,3,像這樣的數組:3如何動態分配一個全局二維數組在C++

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數組?

在此先感謝。

回答

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)); 
} 
-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]; 
+0

感謝您的答覆。但我有語法錯誤:「不能轉換FRM雙[3] [3]一倍**,指着無關;轉換要求reinterpret_cast,C樣式轉換或函數樣式轉換」 – 2012-04-04 03:26:00

+0

@ user1311686:是的,對不起,那無法工作。請參閱我的編輯。這並不是很乾淨,但如果你堅持使用具有初始化列表的靜態數組,這取決於運行時值,這與你將要得到的結果一樣。你應該考慮避免這個靜態數組。 – bitmask 2012-04-04 03:48:01

+2

該函數返回對局部變量的引用;這不起作用 – anatolyg 2012-04-04 06:05:53