2 votes

Affectation du double * à V[3]

J'ai une fonction qui renvoie 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;
}

Comment puis-je affecter le résultat de addVectors dans un tableau ? J'ai fait ce qui suit, mais je suis sûr qu'il existe une méthode professionnelle pour le faire.

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

4voto

billz Points 28166

addVectors renvoie un pointeur vers un tableau local, quand addVectors renvoie à val devient une donnée résiduelle.

vous pouvez passer un troisième paramètre à addVectors vous devez vous assurer que tous vec ont au moins 3 éléments cependant :

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

Ma suggestion est d'utiliser un conteneur STL comme suit std::vecteur , std::list etc ou utiliser st::array si C++11 est activé.

Avec le conteneur STL, vous pouvez archiver vos intentions :

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

0voto

Claptrap Points 21299

Une autre façon de retourner un tableau à partir d'une fonction est de l'intégrer dans une structure, car le contenu sera alors copié :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X