Maison  >  Article  >  développement back-end  >  Comment renvoyer en toute sécurité un tableau à partir d’une fonction en C ?

Comment renvoyer en toute sécurité un tableau à partir d’une fonction en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 08:16:02158parcourir

How do you safely return an array from a function in C  ?

Renvoi de tableaux à partir de fonctions en C

En C , renvoyer un tableau à partir d'une fonction peut être une source potentielle d'erreurs, surtout si le le tableau est alloué sur la pile.

Considérez le code suivant :

<code class="cpp">#include <iostream>

using namespace std;

int* uni(int *a, int *b) {
    int c[10];
    int i = 0;
    while (a[i] != -1) {
        c[i] = a[i];
        i++;
    }
    for (; i < 10; i++)
        c[i] = b[i - 5];

    return c;
}

int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    int *c = uni(a, b);
    for (int i = 0; i < 10; i++)
        cout << c[i] << " ";
    cout << "\n";

    return 0;
}</code>

Dans ce code, la fonction uni() crée un tableau c et fusionne les nombres non négatifs des tableaux a et b en c. Cependant, lorsque le code tente de renvoyer c, le tableau sort de la portée, ce qui entraîne le renvoi de valeurs inutiles.

Pour éviter ce problème, il est généralement recommandé de transmettre des tableaux en tant que pointeurs vers des fonctions et de renvoyer les pointeurs. . Cependant, l'utilisation de pointeurs peut être fastidieuse et, dans certains cas, il peut être préférable d'utiliser une approche différente.

Une alternative consiste à utiliser une structure ou une classe pour encapsuler le tableau et renvoyer l'objet par valeur. Considérez le code modifié suivant :

<code class="cpp">#include <iostream>

using namespace std;

struct myArray {
   int array[10];
};

myArray uni(int *a, int *b) {
    myArray c;
    int i = 0;
    while (a[i] != -1) {
        c.array[i] = a[i];
        i++;
    }
    for (; i < 10; i++)
        c.array[i] = b[i - 5];

    return c;
}

int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    myArray c = uni(a, b);
    for (int i = 0; i < 10; i++)
        cout << c.array[i] << " ";
    cout << "\n";

    return 0;
}</code>

Dans cet exemple, la fonction uni() renvoie une instance de la structure myArray. La structure est renvoyée par valeur et son tableau interne est copié, garantissant que les valeurs sont valides même après le retour de la fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn