6 votes

Retourner un tableau à partir d'une fonction

Voici mon code

double hour_payload_add(int entries , double array[])
{
    int index=0 ,k=0;
    int totalpayload=0;
    double returnarray[entries/120];
    while(k< entries)
    {
           totalpayload = totalpayload + array[k];
            if(k%120==0)
                {
                returnarray[index] = totalpayload;
                index++;
                totalpayload=0;
                }

    }

return returnarray;
}

ici je l'ai appelé

double hourgraph[hrentries];
 hourgraph= hour_payload_add(entries , graph);

comme je veux retourner un tableau, que dois-je faire pour retourner sans utiliser de pointeurs ?

1voto

icabod Points 4576

En général, vous ne devriez pas utiliser de tableaux en C++, mais plutôt utiliser les classes de conteneurs de la STL ( std::vector est le plus semblable à un tableau). Bien sûr, il y a des exceptions, et dans certains cas, vous devriez utiliser un tableau (il ne faut jamais dire jamais), mais dans votre exemple, je suggérerais l'utilisation de vector à la place.

La réponse de Sehe fournit un exemple de l'utilisation de la std::vector et l'initialiser avec la taille du tableau :

std::vector<double> returnarray(entries/120);

Ceci utilise un constructeur qui définit la taille par défaut du tableau. Plus utilement, un vecteur peut changer de taille dynamiquement, et vous pouvez, comme suggéré, le retourner depuis une fonction. En fonction de l'optimisation effectuée par le compilateur, il se peut même qu'une copie du vecteur ne soit pas créée - mais cela dépend du compilateur.

Je vous suggère de consulter la documentation sur vecteur et d'autres conteneurs, de préférence à un tableau.

0voto

Alok Save Points 115848

Vous ne pouvez pas retourner un tableau de style C à partir d'une fonction en C++. Mais oui, vous pouvez renvoyer un std::array conteneur à partir d'une fonction

Vous pouvez renvoyer l'adresse de départ du tableau de style c qui est créé localement à l'intérieur de la fonction, mais ce tableau est effacé lorsque la fonction revient et vous vous retrouvez avec un pointeur qui ne pointe pas vers ce que vous vouliez.

Vous devrez allouer dynamiquement un tableau à l'aide de la fonction new puis renvoie le pointeur sur celui-ci.

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