Parametre de sortie d'une fonction

wislam2007 Messages postés 62 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 21 mars 2010 - 12 août 2009 à 10:03
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 15 août 2009 à 20:07
Salut

je veux enregistrer des infos dans des paramertre de sortie d'une fonction (en c++)?



Cordialement

5 réponses

Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
12 août 2009 à 10:17
J'aime pas le terme de paramètre de sortie.
C'est démodé, ça vient du c avec les read(buff), et ça dénote rien du tout.

Pour moi, buff existe déja, on l'a alloué, et read va y ranger des trucs dedans .

Je parle plutôt d'environnement de fonction. A cet instant, on voit un peu plus clair: buff est un espace mémoire qu'on donne à la fonction qui va s'en servir pour ranger ce qu'elle veut.

// la fameuse fonction swap
void swap1(int a,int b){
int tmp=a; a=b; b=tmp;
}

La fonction swap dispose d'un environnement de valeurs, pas de variables. Cette fonction échange 2 entiers dans sa propre mémoire (Super utile).
Si tu veux disposer des variables, tu dois faire

void swap2(int &a,int &b){
int tmp=a; a=b; b=tmp;
}

Cette fonction là dispose d'un environnement de 2 variables a et b (En simplifié, l'esperluette & veut dire je veux que mon a désigne la même variable que celle que je vais utiliser pour appeler swap())
Mais attention !

int a=33;
int b=44;
swap1(a,b); // possible
swap1(a,3); // possible
swap2(a,b); // possible
swap2(a,4); // IMPOSSIBLE ! swap2 veut 2 variables


Sans '&', ton compilateur va fabriquer un fonction qui prend des valeurs.

; I'm just keeping the hopeless cross to increase the meaninglessness
0
wislam2007 Messages postés 62 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 21 mars 2010 6
12 août 2009 à 10:38
si je comprend bien, tu veux dire il faut passer par adressage par reference?


A vs
0
sboli Messages postés 10 Date d'inscription vendredi 14 août 2009 Statut Membre Dernière intervention 31 mai 2010
14 août 2009 à 20:26
Passer par adressage sa veut pas dire grand chose, adressage par réfence encore moins.
En revanche oui, il faut passer par référence.
A noter qu'il existe la fonction std::swap dans le standard.
0
wislam2007 Messages postés 62 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 21 mars 2010 6
14 août 2009 à 20:37
mais je vois pas l'intérêt de swap.


A vs
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 août 2009 à 20:07
Il ne te dit pas que swap résout ton problème, il utilise un exemple pertinent pour t'expliquer un concept que tu ne sembles pas maîtriser. Je t'invite à revoir les pointeurs, une parfaite compréhension de cette notion répondras à la majorité des questions que tu te poses.

void pouet(int& nb)
{
  nb = 5;
}

int main()
{
  int nb = 0;
  std::cout << nb << std::endl;
  pouet(nb);
  std::cout << nb << std::endl;
  return 0;
}
0
Rejoignez-nous