Returnere matriser fra funksjonen
Sveip for å vise menyen
Det finnes en viktig begrensning: kun dynamiske arrayer kan returneres fra funksjoner. Denne begrensningen skyldes funksjonens lokale omfang; statiske arrayer opprettet inne i en funksjon er kun tilgjengelige innenfor den funksjonen.
Hvis du prøver å returnere en lokalt opprettet array, vil du støte på en begrensning på grunn av funksjonens omfang (du forsøker å returnere adressen til ikke-eksisterende variabler, noe som vil føre til en feil).
Returnere en dynamisk array
I motsetning til lokale variabler, som frigjøres når en funksjon avsluttes, gjør dynamisk minne allokert med new[] at data kan eksistere etter at funksjonen er ferdig. Dermed kan vi få tilgang til variabler opprettet inne i funksjonen ved hjelp av deres adresser.
For å returnere en dynamisk array må vi bruke følgende typespesifikatorer i funksjonssignaturen:
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; }
Funksjonen allokerer dynamisk minne for et heltallsarray av angitt størrelse. Den initialiserer array-elementene med verdier fra 1 til arrayets size. Funksjonen returnerer en peker til det første elementet i det dynamisk allokerte heltallsarrayet som nå kan brukes 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; }
Prinsippet er det samme som ved retur av et 1D-array: den eneste forskjellen er at vi må returnere en peker til arrayet av pekere ved å bruke int**-typespesifikatoren for å returnere 2D-arrayet.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår