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
[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
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
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:
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:
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:
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 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; }
27 mai 2013 à 11:14
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 !
27 mai 2013 à 11:20
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