Une fonction qui renvoie un tableau

Signaler
Messages postés
7
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
27 mars 2007
-
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Bonjour ,
Je suis encore noob en C, et je ne trouve pas comment on fait pour qu'une fonction retourne un tableau .
En gros, je souhaiterais pouvoir faire :

fonction createTab ( paramètres ) {

}

qui renvoie un tableau en fonction des paramètres ..
et que je puisse utiliser comme suit :

int tableau[taille_tableau] = createTab( paramètres );

Pouvez-vous me filer un coup de main svp ?
Merci d'avance

3 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Une fonction ne peut pas renvoyer un tableau, car les tableaux réservés dans une fonction n'existent plus quand la fonction est terminée.
Une solution est d'allouer dans la fonction, avec malloc ou new. Dans ce cas on parle de pointeur plutot que de tableau:

int* createTab()
{
return new int[10];
}

// appel:
int* p = createTab();
delete[] p;

C'est dans ce cas à l'appelant de libérer la mémoire.

L'autre solution (la plus utilisée) est que c'est l'appelant qui déclare le tableau:

void createTab(int t[10])
{
initialisation du tableau
}

// appel:
int t[10];
createTab(t);
Messages postés
14717
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
28 janvier 2020
90
Il est plus courant de passer le tableau en paramètre de la fonction:



void CreateTab(int *Tab, int TabSize, /* autres paramètres */)

{

...

Tab=(int *)malloc(TabSize*sizeof(int)); // ou Tab = new int[TabSize];

...

}

Buno
----------------------------------------
L'urgent est fait, l'impossible reste à faire. Pour les miracles, prévoir un délai...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Si tu alloues dans la fonction, ca ne sert à rien de passer le pointeur en paramètre, l'appelant ne pourra pas le récupérer (le pointeur est passé par valeur).