将双*指定给V[3]

Assigning double * to V[3]

本文关键字:将双      更新时间:2023-10-16

我有一个函数,它返回double *

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];

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::vector、std::list等,或者如果启用了C++11,则使用st::array。

使用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;
    }
}

从函数返回数组的另一种方法是将其嵌入到结构中,因为这样内容就会被复制:

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;
}