Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Returnere matriser fra funksjonen | Spesifikasjon av returverdier for funksjoner
C++-Funksjoner

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

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

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.

question mark

Hvilket utsagn om å returnere arrayer fra funksjoner er korrekt?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 2
some-alt