Retour des Tableaux Depuis la Fonction
Glissez pour afficher le menu
Il existe une limitation cruciale : seuls les tableaux dynamiques peuvent être retournés par des fonctions. Cette restriction provient de la portée locale des fonctions ; les tableaux statiques créés à l'intérieur d'une fonction ne sont accessibles que dans cette fonction.
Si vous essayez de retourner un tableau créé localement, vous rencontrerez une limitation due à la portée de la fonction (vous tenterez de retourner l'adresse de variables inexistantes, ce qui entraînera une erreur).
Retourner un tableau dynamique
Contrairement aux variables locales, qui sont désallouées à la sortie d'une fonction, la mémoire dynamique allouée avec new[] permet aux données de survivre au-delà de la portée de la fonction où elles ont été créées. Par conséquent, il est possible d'accéder aux variables créées dans la fonction en utilisant leurs adresses.
Pour retourner un tableau dynamique, il faut utiliser les spécificateurs de type suivants dans la signature de la fonction :
dataType*pour un tableau 1D.dataType**pour un tableau 2D.
main.cpp
12345678910111213141516171819#include <iostream> // Function to create and return a dynamic 1D array int* createArray(const int size) { int* arr = new int[size]; for (int i = 0; i < size; ++i) arr[i] = i + 1; // Example initialization return arr; } int main() { int size = 5; int* myArray = createArray(size); // Don't forget to delete the dynamically allocated memory delete[] myArray; }
La fonction alloue dynamiquement de la mémoire pour un tableau d'entiers de la taille spécifiée. Elle initialise les éléments du tableau avec des valeurs de 1 à la size du tableau. La fonction retourne un pointeur sur le premier élément du tableau d'entiers alloué dynamiquement qui peut maintenant être utilisé dans le bloc main().
main.cpp
1234567891011121314151617181920212223242526272829303132333435#include <iostream> // Function to create and return a dynamic 2D array int** createArray(const int rows, const int cols) { int** arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[cols]; for (int j = 0; j < cols; ++j) { arr[i][j] = i * cols + j + 1; // Example initialization } } return arr; } int main() { int rows = 3; int cols = 2; int** myArray = createArray(rows, cols); // Use the returned 2D array for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { std::cout << myArray[i][j] << " "; } std::cout << std::endl; } // Don't forget to delete the dynamically allocated memory for (int i = 0; i < rows; ++i) { delete[] myArray[i]; } delete[] myArray; return 0; }
Le principe est le même que pour le retour d'un tableau à une dimension : la seule différence est que nous devons retourner un pointeur vers le tableau de pointeurs en utilisant le spécificateur de type int** pour retourner le tableau à deux dimensions.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion