Renvoie detableau en c

Résolu
bennaniidriss Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,
tout dabord je voudrais remercier toutes les personnes qui ont bien voulu repondre a mes messages car sa ma beaucoup aidé surtout que je suis un debutant .
ce que je voudrais savoir c'est comment je pourais faire pour qu'un fonction renvoie un tableau de données
par exemple j'ai une fonction qui remplie un tableau avec des entier puis je voudrai en suite qu'une autre fonction qui faie le tri de ce dernier le reçoit comme parametre alors la preumiere fonction(qui fais le remplissage) dois renvoyer le tableau une foie remplie et c'est ce que je ne metrise pas .
j'espere que j'ai ete claire et que je vais recevoir des reponses le plus vite possible car c'est tres urgent et merci d'avance
a bientot

1 réponse

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
S'il s'agit d'un tableau statique du genre:
char tableau[100];

Ben ça dépend. Si ce tableau est déclaré dans la fonction, tu ne peux pas le retourner avec return, car ce tableau est une donnée locale.

En revanche s'il le tableau est passé en paramètre de la fonction, tu peux sans doute le retourner avec return (mais bon, si tu le mets en paramètre, tu n'as pas besoin de le retourner.

Je m'explique:
//Ca tu peux le faire
char *machin(char tableau[100])
{
          return tableau;
}

//Ca tu n'as pas le droit, car tableau est local à la fonction
char *machin()
{
          char tableau[100];
          return tableau;
}


Si tu dois déclarer ce tableau dans ta fonction, alors utilise un tableau dynamique avec malloc ou calloc.
Les tableaux dynamiques sont stockés dans un espace memoire qui n'est pa le même et ne sont pas detruits à la fin de la fonction.

Mais si tu utilises un tableau que tu doit modifier dans une fonction, ça me semble plus pratique de faire:
int machin(char tableau[100])
{
          if (tout s'est bien passé){
                  return 0;
         }
         else{
                  return -1;
         }
}

Dis toi qu'avec ça, si ta fonction retoune 0 alors ton tableau a bien été modifié. Et tu as forcément encore accés a ton tableau puisque tu viens t'appeler cette fonction en mettant le tableau en paramètre:
int main(int argc, char **argv)
{
          char bidule[100];
          if ( ! machin(bidule) ){
                /* bidule a bien été modifié, et tu y as encore accés
                 donc ça ne sert à rien de le mettre en valeur de retour de machin
                */
          }
          return 0;
}

Par contre ca sert de le mettre en valeur de retour dans le cas d'un tableau dynamique alloué à l'intérieur d'une fonction (puisqu'il te faut un pointeur vers cet espace memoire):
char *machin()
{
         char *truc;
         truc=(char *)malloc(100);
         return truc;
}

int main(int argc, char **argv)
{
        char *bidule;
        bidule=machin();
        //Ne pas oublier de libérer l'espace alloué pointé par bidule plus tard.
       return 0;
}

2
Jug
 
Bonjour,
J'ai le même souci, je cherche à créer une fonction qui renvoie ou qui modifie un tableau j'ai testé les bouts de code ci dessus mais ça ne fonctionne pas !
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut Jug,

Crée un nouveau sujet, avec ton code et ta question (mets le code entre balises "code", en cliquant sur le bouton "< >" à droite du bouton de soulignement).


Dal
0