C++ Retourner un pointeur depuis des fonctions
Dans le chapitre précédent, nous avons appris comment renvoyer un tableau depuis une fonction en C++. De même, C++ vous permet de renvoyer un pointeur depuis une fonction. Pour ce faire, vous devez déclarer une fonction qui renvoie un pointeur, comme suit :
int * myFunction()
{
.
.
.
}
De plus, C++ ne permet pas de renvoyer l'adresse d'une variable locale en dehors de la fonction, sauf si la variable locale est définie comme une variable statique.
Maintenant, examinons la fonction suivante, qui génère 10 nombres aléatoires et les renvoie à l'aide d'un nom de tableau qui représente un pointeur (c'est-à-dire l'adresse du premier élément du tableau), comme suit :
Exemple
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
// fonction pour générer et renvoyer des nombres aléatoires
int * getRandom( )
{
static int r[10];
// Définir la graine
srand( (unsigned)time( NULL ) );
for (int i = 0; i < 10; ++i)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
}
// fonction main pour appeler la fonction définie ci-dessus
int main ()
{
// un pointeur vers un entier
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;
// fonction pour générer et renvoyer des nombres aléatoires
int * getRandom( )
{
static int r[10];
// Définir la graine
srand( (unsigned)time( NULL ) );
for (int i = 0; i < 10; ++i)
{
r[i] = rand();
cout << r[i] << endl;
}
return r;
}
// fonction main pour appeler la fonction définie ci-dessus
int main ()
{
// un pointeur vers un entier
int *p;
p = getRandom();
for ( int i = 0; i < 10; i++ )
{
cout << "*(p + " << i << ") : ";
cout << *(p + i) << endl;
}
return 0;
}
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant :
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) : 667126415autres extensions