Retour des Tableaux Depuis la Fonction
Tout comme les types de données simples, les tableaux peuvent être renvoyés comme résultats de fonction.
Cependant, il existe une limitation cruciale : seuls les tableaux dynamiques peuvent être renvoyé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 tentez de renvoyer un tableau créé localement, vous rencontrerez une limitation due à la portée de la fonction (vous essayerez de renvoyer l'adresse de variables inexistantes, ce qui entraînera une erreur).
Retourner un tableau dynamique
Pourquoi pouvons-nous retourner des tableaux dynamiques ?
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.
Retourner un tableau 1D
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 vers le premier élément du tableau d'entiers alloué dynamiquement qui peut maintenant être utilisé dans le bloc main().
Retourner un tableau 2D
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 1D : 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 2D.
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
Awesome!
Completion rate improved to 5
Retour des Tableaux Depuis la Fonction
Glissez pour afficher le menu
Tout comme les types de données simples, les tableaux peuvent être renvoyés comme résultats de fonction.
Cependant, il existe une limitation cruciale : seuls les tableaux dynamiques peuvent être renvoyé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 tentez de renvoyer un tableau créé localement, vous rencontrerez une limitation due à la portée de la fonction (vous essayerez de renvoyer l'adresse de variables inexistantes, ce qui entraînera une erreur).
Retourner un tableau dynamique
Pourquoi pouvons-nous retourner des tableaux dynamiques ?
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.
Retourner un tableau 1D
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 vers le premier élément du tableau d'entiers alloué dynamiquement qui peut maintenant être utilisé dans le bloc main().
Retourner un tableau 2D
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 1D : 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 2D.
Merci pour vos commentaires !