C++ Arrays aus Funktionen zurückgeben

C++ Arrays

C++ erlaubt es nicht, ein vollständiges Array als Funktionsargument zurückzugeben. Sie können jedoch einen Zeiger auf ein Array zurückgeben, indem Sie den Array-Namen ohne Index angeben.

Wenn Sie ein eindimensionales Array aus einer Funktion zurückgeben möchten, müssen Sie eine Funktion deklarieren, die einen Zeiger zurückgibt, wie folgt:

int * myFunction() { //. . . }

Das folgende Beispiel:

Beispiel

int* myFunction()
{
   int myArray[3] = {1, 2, 3};
   return myArray;
}

Hinweis:Sie können nicht einfach einen Zeiger auf ein lokales Array zurückgeben, denn wenn die Funktion endet, wird das lokale Array zerstört, und der Zeiger darauf wird ungültig.

C++ unterstützt das Zurückgeben der Adresse einer lokalen Variablen außerhalb der Funktion nicht, es sei denn, die lokale Variable ist alsstaticVariable definiert.

Um die obige Situation zu vermeiden, können Sie ein statisches Array oder ein dynamisch zugewiesenes Array verwenden.

Die Verwendung eines statischen Arrays erfordert, ein statisches Array innerhalb der Funktion zu erstellen und seine Adresse zurückzugeben, zum Beispiel:

int* myFunction()
{
   static int myArray[3] = {1, 2, 3};
   return myArray;
}

Betrachten wir nun die folgende Funktion, die 10 Zufallszahlen generiert und ein Array verwendet, um sie zurückzugeben, wie folgt:

Beispiel

#include <iostream> #include <cstdlib> #include <ctime> using namespace std; // Funktion zum Generieren und Zurückgeben von Zufallszahlen int * getRandom( ) { static int r[10]; // Seed setzen srand( (unsigned)time( NULL ) ); for (int i = 0; i < 10; ++i) { r[i] = rand(); cout << r[i] << endl; } return r; } // Hauptfunktion zum Aufrufen der oben definierten Funktion int main () { // ein Zeiger auf eine Ganzzahl int *p; p = getRandom(); for ( int i = 0; i < 10; i++ ) { cout << "*(p + " << i << ") : "; cout << *(p + i) << endl; } return 0; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

624723190
1468735695
807113585
976495677
613357504
1377296355
1530315259
1778906708
1820354158
667126415
*(p + 0) : 624723190
*(p + 1) : 1468735695
*(p + 2) : 807113585
*(p + 3) : 976495677
*(p + 4) : 613357504
*(p + 5) : 1377296355
*(p + 6) : 1530315259
*(p + 7) : 1778906708
*(p + 8) : 1820354158
*(p + 9) : 667126415

Die Verwendung eines dynamisch zugewiesenen Arrays erfordert die Verwendung des new-Operators innerhalb der Funktion, um ein Array zu allozieren, und die Verwendung des delete-Operators, um das Array freizugeben, wenn die Funktion endet, zum Beispiel:

Beispiel

int* myFunction()
{
   int* myArray = new int[3];
   myArray[0] = 1;
   myArray[1] = 2;
   myArray[2] = 3;
   return myArray;
}

int main()
{
   int* result = myFunction();
   // result verwenden
   delete[] result;
   return 0;
}

Das folgende ist ein einfaches Anwendungsbeispiel, das zeigt, wie man ein Array von einer Funktion zurückgibt:

Beispiel

#include <iostream>
using namespace std;

int* createArray(int size) {
    int* arr = new int[size];
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
    return arr;
}

int main() {
    int* myArray = createArray(5);
    for (int i = 0; i < 5; i++) {
        cout << myArray[i] << " ";
    }
    cout << endl;
    delete[] myArray; // Speicher freigeben
    return 0;
}

Im obigen Beispiel haben wir eine Funktion namens createArray deklariert, die einen Integer-Parameter size akzeptiert und ein mit Ganzzahlen gefülltes Integer-Array zurückgibt. Wir haben den new-Operator verwendet, um dynamisch ein Array auf dem Heap zuzuweisen, und haben das Array innerhalb der Funktion gefüllt. Schließlich gab die Funktion einen Zeiger auf das Array zurück.

In der main-Funktion haben wir die Funktion createArray aufgerufen und den zurückgegebenen Array-Zeiger in myArray gespeichert. Dann haben wir über das Array iteriert und den Wert jedes Elements ausgegeben. Schließlich haben wir den Operator delete[] verwendet, um den von myArray belegten Speicher freizugeben, um Speicherlecks zu vermeiden.

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

1 2 3 4 5 

Hinweis:Bei Verwendung eines dynamisch zugewiesenen Arrays ist der Code, der die Funktion aufruft, dafür verantwortlich, das zurückgegebene Array freizugeben. Das liegt daran, dass das innerhalb der Funktion zugewiesene Array nicht automatisch freigegeben wird, wenn die Funktion endet.

C++ Arrays

Weitere Erweiterungen