Returnera Arrayer Från Funktionen
Svep för att visa menyn
Det finns en viktig begränsning: endast dynamiska arrayer kan returneras från funktioner. Denna begränsning beror på funktioners lokala omfång; statiska arrayer som skapas inom en funktion är endast tillgängliga inom den funktionen.
Om du försöker returnera en lokalt skapad array kommer du att stöta på en begränsning på grund av funktionens omfång (du försöker returnera adressen till icke-existerande variabler vilket leder till ett fel).
Returnera en dynamisk array
Till skillnad från lokala variabler, som avallokeras när en funktion avslutas, gör dynamiskt minne som allokeras med new[] att data kan överleva utanför funktionen där det skapades. Därför kan vi komma åt variabler som skapats inuti funktionen via deras adresser.
För att returnera en dynamisk array måste vi använda följande typangivelser i funktionssignaturen:
dataType*för en endimensionell array.dataType**för en tvådimensionell 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 allokerar dynamiskt minne för en heltalsarray av angiven storlek. Den initierar arrayens element med värden från 1 till arrayens size. Funktionen returnerar en pekare till det första elementet i den dynamiskt allokerade heltalsarrayen som nu kan användas i main()-blocket.
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; }
Principen är densamma som vid retur av en endimensionell array: den enda skillnaden är att vi måste returnera en pekare till arrayen av pekare genom att använda typangivelsen int** för att returnera den tvådimensionella arrayen.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal