Passage par adresse et par valeur - Algo - Programmation
Marsh Posté le 29-12-2002 à 17:52:44
Marsh Posté le 29-12-2002 à 17:57:54
Tu récupère le résultat comment ?
Si c'est dans A ou dans B alors oui, il faut les passer par adresses.
Marsh Posté le 29-12-2002 à 17:57:59
personne?
Marsh Posté le 29-12-2002 à 18:01:13
mrbebert a écrit : Tu récupère le résultat comment ? |
dans A !
Marsh Posté le 29-12-2002 à 18:02:03
schumacher a écrit : |
Dans ce cas, oui. Il faut que la fonction modifie A et pouvoir consulter sa nouvelle valeur après l'exécution. Donc passage par adresse.
Marsh Posté le 29-12-2002 à 18:02:27
enfin à la fin je fais un :
nom_de_la_fonction := A
Marsh Posté le 29-12-2002 à 18:03:36
ok donc 2 raisons pour le choix par adresse :
daccord pour les 2 points?
merci bcp
Marsh Posté le 29-12-2002 à 18:04:20
schumacher a écrit : enfin à la fin je fais un : |
Dans ce cas ce n'est plus utile. Un passage par valeur suffit puisque l'appelant n'a pas besoin de connaitre les nouvelles valeurs de A (il récupérera le résultat par le retour de la fonction).
Marsh Posté le 29-12-2002 à 18:06:24
comment faire pour savoir alors?
il faut passer par adresse uniquement quand le résultat est utilisé en sortie ?
Marsh Posté le 29-12-2002 à 18:25:19
up
Marsh Posté le 29-12-2002 à 18:34:55
schumacher a écrit : ok donc 2 raisons pour le choix par adresse :
|
non
Ca dépend si tu veux que la fonction/procédure appelée puisse modifier directement la valeur de ta variable.
Si tu veux seulement qu'elle utilise la valeur mais sans la modifier, tu la passe par valeur. Si tu veux qu'elle modifie la variable, tu passes par adresse.
Par exemple, pour une fonction qui doublerait une variable :
1er cas :
A = 3
double(A)
echo "La nouvelle valeur de A est " . A // affiche 6
Dans ce cas, A doit être passée par adresse car tu veux que la fonction "double" modifie directement la valeur de A.
2ème cas :
A = 3
B = double(A)
echo "A vaut encore " . A // affiche 3 car A n'est pas modifiée
echo "B vaut " . B // affiche 6
Ici, tu ne veux pas que "double" puisse modifier A, tu la passes par valeur.
L'avantage, c'est que "double" ne peut pas modifier A, même si, en interne, rien ne l'empêche de faire quelque chose comme "A = A * 2". En passant par valeur, la fonction "double" travaille sur une copie de A, ce qui évite tout effet de bord.
Marsh Posté le 29-12-2002 à 19:26:02
c très clair
merci bcp t super sympa
Marsh Posté le 29-12-2002 à 20:22:18
Parfois, on passe par adresse une variable meme si on ne veut que la consulter sans la modifier pour gagner en perf. C'est le cas pour des variables volumineuses uniquement (pas des octets, hein !).
un passage par adresse => un pointeur
un passage par valeur => on met sur la pile la valeur, meme si sa taile est enorme
Marsh Posté le 29-12-2002 à 20:54:51
oui pour les tableaux par exemple
Marsh Posté le 29-12-2002 à 17:48:16
salut all
j'ai cet algo bidon qui calcule le PGCD (plus gd commun diviseur) de 2 valeurs
voilà la fonction :
TQ A != B FAIRE
| SI A > B ALORS
| | A := A-B
| SINON
| | B := B-A
| FSI
FTQ
on me demande de dire si les variables A et B sont passées par valeur ou par adresse...
ce qu'on peut dire c que à chaque passage dans le TQ un travaille sur les nouvelles valeurs de A et de B donc à priori je dirais qu'il faut les passer par adresse mais sur mon exo j'ai marqué par valeur
c par adresse ou par valeur alors ?
Message édité par schumacher le 29-12-2002 à 17:49:02
---------------
L'impôt appauvrit l'ignorant et enrichit le connaisseur.