Returnering af Arrays fra Funktionen
Stryg for at vise menuen
Der er en vigtig begrænsning: kun dynamiske arrays kan returneres fra funktioner. Denne begrænsning skyldes funktioners lokale scope; statiske arrays oprettet inden for en funktion er kun tilgængelige i den pågældende funktion.
Hvis du forsøger at returnere et lokalt oprettet array, vil du støde på en begrænsning på grund af funktionens scope (du vil forsøge at returnere adressen på ikke-eksisterende variabler, hvilket vil føre til en fejl).
Returnering af et dynamisk array
I modsætning til lokale variabler, som frigives, når en funktion afsluttes, gør dynamisk hukommelse allokeret med new[] det muligt for data at eksistere efter funktionens scope, hvor de blev oprettet. Som resultat kan vi tilgå variabler oprettet inde i funktionen ved hjælp af deres adresser.
For at returnere et dynamisk array skal vi bruge følgende typespecifikatorer i funktionssignaturen:
dataType*for 1D array.dataType**for 2D array.
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; }
Funktionen allokerer dynamisk hukommelse til et heltalsarray af den angivne størrelse. Den initialiserer arrayets elementer med værdier fra 1 til arrayets size. Funktionen returnerer en pointer til det første element i det dynamisk allokerede heltalsarray, som nu kan bruges i main()-blokken.
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; }
Princippet er det samme som ved returnering af et 1D-array: den eneste forskel er, at vi skal returnere en pointer til arrayet af pointers ved at bruge int** typespecifikatoren til at returnere 2D-arrayet.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat