Maison >développement back-end >C++ >Comment renvoyer un tableau à partir d'une fonction en C ?
Vous pouvez renvoyer un tableau à partir d'une fonction en C en utilisant des pointeurs. Cependant, cela peut entraîner des problèmes si le tableau n'est pas correctement alloué.
Dans votre exemple, vous essayez de renvoyer un tableau alloué sur la pile. Cela peut provoquer un comportement indéfini lors du retour de la fonction.
Pour éviter ce problème, vous pouvez allouer le tableau sur le tas à l'aide de l'opérateur new. Vous pouvez ensuite renvoyer un pointeur vers le tableau alloué.
<code class="C++">int* uni(int *a, int *b) { int *c = new int[10]; int i = 0; while (a[i] != -1) { c[i] = a[i]; i++; } for (; i < 10; i++) { c[i] = b[i - 5]; } return c; }</code>
Vous pouvez ensuite utiliser le pointeur renvoyé pour accéder au tableau.
<code class="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"; delete[] c; return 0; }</code>
Cela affichera :
1 3 3 8 4 1 3 4 3 0
Une autre alternative consiste à utiliser une structure pour envelopper le tableau. Cela peut être renvoyé par valeur, et la structure sera copiée, y compris le tableau qui y est interne.
<code class="C++">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>
Cela affichera également :
1 3 3 8 4 1 3 4 3 0
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!