Passage par reference

Résolu/Fermé
matafix Messages postés 45 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 23 janvier 2009 - 12 mars 2008 à 21:49
matafix Messages postés 45 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 23 janvier 2009 - 14 mars 2008 à 20:52
Bonjour,(langage C)
svp expliquez moi c'est quoi un passage par référence, a quoi il sert et comment on le declare dans une fonction???

2 réponses

Salut Matafix,

si mes souvenirs sont bons, et ils doivent l'être :-)) , un passage par référence, contrairement à un passage par valeur, c'est quand tu utilises un pointeur vers une variable plutôt que la variable elle-même.

Je te fais un petit exemple, une multiplication à trois paramètres.

function multipli(int a, int b, int *c) { a et b par valeur, c par reference
(*c) = a * b;
}


Fonction que tu appelleras ainsi : multipli(val1,val2,&resultat) valeurs de val1 et val2, adresse de resultat

L'usage c'est pour avoir des paramètres en retour de fonction.
Une fonction ne renvoye qu'un résultat, si tu en veux plusieurs, passe ces paramètres par référence.

Bon courage, Greg.
0
matafix Messages postés 45 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 23 janvier 2009 2
12 mars 2008 à 22:42
salut greg et merci pour ton aide ;
j'ai creer une fonction en utilisant un passage par reference mais le compilateur m'envoie les erreurs suivantes:
47 E:\ABDELLAH\struct\tabstuck.cpp cannot convert `pile' to `pile*' for argument `1' to `void empile(pile*, typeEl)'
56 E:\ABDELLAH\struct\tabstuck.cpp cannot convert `pile' to `pile*' for argument `1' to `void depile(pile*)'
peut tu m'aider stp, voila la fonction
int test(pile &p,char ch[20])
{int i,res;
for(i=0;ch[i]!='/0';i++)
{if(((ch[i]=='(')||(ch[i]=='['))&&(!estPleine(p)))
empile(p,ch[i]);
else
if((ch[i]==')')&&(!estVide(p)))
if(p.t[p.sm]==')')
depile(p);
else
res=false;
if((ch[i]==']')&&(!estVide(p)))
if(p.t[p.sm]=='}')
depile(p);
else
res=false;
}
return res;
}
0
greg > matafix Messages postés 45 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 23 janvier 2009
12 mars 2008 à 22:59
A la déclaration tu ne peux pas faire ces choses :

int test(pile &p,char ch[20])

déjà tu ne peux pas mettre une adresse & mais un pointeur *

int test(pile *p, char ch[20])

ensuite il te mettra aussi un message pour ta chaine de caractère, on ne peut contraindre sa taille à 20 !!!

int test(pile *p, char ch[])

De même, dépile qui fonctionne aussi avec pointeur, tu ne dois pas mettre depile(p) mais depile(&p), en fait je suppose car je n'ai pas les sources.

A++
0
matafix Messages postés 45 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 23 janvier 2009 2
14 mars 2008 à 20:52
merci ta solution est utile
0