Maison > développement back-end > C++ > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-30 08:16:02
original
243 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal