Renvoie detableau en c

Résolu/Fermé
bennaniidriss Messages postés 20 Date d'inscription dimanche 23 octobre 2005 Statut Membre Dernière intervention 23 mars 2006 - 15 janv. 2006 à 12:26
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 mai 2013 à 11:20
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 janv. 2006 à 15:55
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
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 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
27 mai 2013 à 11:20
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