C++ Rückgabe eines Zeigers aus Funktionen
Im vorherigen Kapitel haben wir gelernt, wie man in C++ ein Array aus einer Funktion zurückgibt. Ebenso erlaubt es C++, einen Zeiger aus einer Funktion zurückzugeben. Dazu müssen Sie eine Funktion deklarieren, die einen Zeiger zurückgibt, wie folgt:
int * myFunction()
{
.
.
.
}
Darüber hinaus unterstützt C++ nicht die Rückgabe der Adresse einer lokalen Variablen außerhalb der Funktion, es sei denn, die lokale Variable ist als statische Variable definiert.
Betrachten wir nun die folgende Funktion, die 10 Zufallszahlen erzeugt und sie mithilfe eines Array-Namens zurückgibt, der einen Zeiger darstellt (d. h. die Adresse des ersten Array-Elements), wie folgt:
Beispiel
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
// Funktion zum Erzeugen und Zurückgeben von Zufallszahlen
int * getRandom( )
{
static int r[10];
// Startwert setzen
srand( (unsigned)time( NULL ) );
for (int i = 0; i < 10; ++i)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
}
// Hauptfunktion, um die oben definierte Funktion aufzurufen
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;
}
#include <ctime>
#include <cstdlib>
using namespace std;
// Funktion zum Erzeugen und Zurückgeben von Zufallszahlen
int * getRandom( )
{
static int r[10];
// Startwert setzen
srand( (unsigned)time( NULL ) );
for (int i = 0; i < 10; ++i)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
}
// Hauptfunktion, um die oben definierte Funktion aufzurufen
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, erzeugt er das folgende Ergebnis:
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) : 667126415Weitere Erweiterungen