2013-08-03 32 views
2

我有返回double *分配雙*到V [3]

double* addVectors(double* vec1, double* vec2) 
{ 
    double vec[3]; 
    for(int i = 0; i < 3; i++) 
     vec[i] = vec1[i] + vec2[i]; 

    return vec; 
} 

的功能如何可以的addVectors結果分配給數組?我做了以下,但我確信有一個專業的方式來做到這一點。

double A[3] = {1, 2, 3}; 
double B[3] = {4, 5, 6}; 
double C[3]; 

double *val = addVectors(A, B); 
C[0] = val[0]; 
C[1] = val[1]; 
C[2] = val[2]; 

回答

4

addVectors指針返回到一個本地陣列中,當addVectors返回val變爲垃圾數據。

,你可以在第三個參數傳遞給addVectors,你需要確保所有vec具有儘管至少3個要素:

void addVectors(double* vec1, double* vec2, double* vec) 
{ 
    for(int i = 0; i < 3; i++) 
     vec[i] = vec1[i] + vec2[i]; 
} 

double A[3] = {1, 2, 3}; 
double B[3] = {4, 5, 6}; 
double C[3] = {};   // initialize all C elements to 0.0 

addVectors(A,B,C); 

我的建議是使用STL容器一樣std::vectorstd::list etc,或者如果使用st::arrayÇ ++ 11已啓用。

隨着STL容器可以存檔您的意向:

std::vector<double> addVectors(const std::vector<double>& v1, 
           const std::vector<double>& v2) 
{ 
    std::vector<double> v; 

    for(int i = 0; i < 3; i++) 
    { 
     v.push_back(v1[i] + v2[i]); 
    } 

    return v; 
} 


int main() 
{ 

    std::vector<double> A = {1, 2, 3}; 
    std::vector<double> B = {4, 5, 6}; 

    std::vector<double> C(3, 0.0); 

    std::vector<double> D = addVectors(addVectors(A,B),C); 

    for(auto& e : D) 
    { 
     cout << e << endl; 
    } 
} 
+0

我定義函數返回'double *'的原因是我想能夠使用'addVectors(addVectors(A,B),C)'這樣的函數。 – AFP

+2

那麼你應該使用向量或std :: array – billz

+1

似乎'array'會更合適,因爲大小不會改變 –

0

一個其他辦法可以做到從一個函數返回一個數組是將它嵌入到一個結構,因爲這樣的內容會被複制:

typedef struct 
{ 
    double vec[3]; 
} vecret; 


vecret addVectors(double* vec1, double* vec2) 
{ 
    vecret V; 
    double vec[3]; 
    for(int i = 0; i < 3; i++) 
    { 
     V.vec[i] = vec1[i] + vec2[i]; 
    } 
    return V; 
}