passage par référence [C --> C++] - C++ - Programmation
Marsh Posté le 26-06-2007 à 11:24:44
in_your_phion a écrit :
|
Si ta fonction sert à incrémenter toto, par exemple :
Code :
|
Code :
|
Le passage par référence est en quelque sorte un "raccourci" du langage, pour ne pas avoir à déréférencer le pointeur. Le rapport avec l'opérateur '&' qui renvoie l'adresse d'un objet
Code :
|
est assez lointain, finalement. Perso je trouve qu'un autre choix que '&' pour la syntaxe du passage par référence aurait été souhaitable, mais bref.
Marsh Posté le 26-06-2007 à 12:07:11
Il y a aussi que tu es certain que l'objet passé est obligatoirement valide (ni pointeur null, ni pointeur pointant n'importe où dans la mémoire). Tu ne peux pas non plus faire un new/delete sur cette variable, quand bien même sa vraie origine est dans la mémoire (ou disons, je ne crois pas que ce soit possible...)
Marsh Posté le 26-06-2007 à 17:22:19
il n'y a AUCUN rapport entre les références et les allocations dynamiques.
Marsh Posté le 26-06-2007 à 17:28:21
Je sais, pardon, j'ai fourché sur la dernière partie de la phrase... qui ne veut pas dire grand chose du coup (Je voulais dire "quand bien même sa 'vraie' origine serait dans la heap" => pour préciser qu'on peut passer une référence vers un objet résidant en heap, et interdire par la même tout manipulation de l'adresse)
Marsh Posté le 26-06-2007 à 17:52:06
IrmatDen a écrit : Je sais, pardon, j'ai fourché sur la dernière partie de la phrase... qui ne veut pas dire grand chose du coup (Je voulais dire "quand bien même sa 'vraie' origine serait dans la heap" => pour préciser qu'on peut passer une référence vers un objet résidant en heap, et interdire par la même tout manipulation de l'adresse) |
je ne vois toujours pas le rapport.
Code :
|
Marsh Posté le 26-06-2007 à 18:05:52
Au temps pour moi, j'ai mélangé avec avec le "reseating" ("remplacement"? Ce serait une bonne traduction?)
Marsh Posté le 26-06-2007 à 20:38:51
boulgakov a écrit : Si ta fonction sert à incrémenter toto, par exemple :
|
salut,
ok merci . Donc ca a un peut avoir avec le & en C ...ou pas du tout ? En c++, si on peut incrémenter/décrémenter avec & les adresses, peut on le faire sur une valeur ?
merci par avance
Marsh Posté le 26-06-2007 à 23:24:52
in_your_phion a écrit : salut, |
Euh, je ne veux pas être soupe-au-lait, mais ce sont des questions "basiques". Enfin là, j'ai pas vraiment compris la question à vrai dire, mais le sujet de manière générale est traité dans les bases de n'importe quel bouquin bien foutu. Ou sur le Net, par exemple ici :
http://www.commentcamarche.net/cpp/cpppoint.php3
Je n'ai pas fouillé, tu peux sûrement trouver mieux.
"ca a un peut avoir avec le & en C" --> oui pour "int a = 1; int *p = &a" c'est comme en C, non pour le passage par référence
Marsh Posté le 26-06-2007 à 23:30:08
boulgakov a écrit : Euh, je ne veux pas être soupe-au-lait, mais ce sont des questions "basiques". Enfin là, j'ai pas vraiment compris la question à vrai dire, mais le sujet de manière générale est traité dans les bases de n'importe quel bouquin bien foutu. Ou sur le Net, par exemple ici : |
en fait, je voulais savoir si on peut travailler sur les adresses avec le &
merci pour la ref
Marsh Posté le 28-06-2007 à 22:07:50
Bon ben je vais te répondre. Non on ne peut pas travailler avec les adresses pour ce qui est des références, car on ne peut pas modifier l'objet référencé en C++. D'ailleurs une référence doit être immédiatement initialisé
Ce code là n'est pas valide
Code :
|
Celui la l'est
Code :
|
Mais les références ne sont pas vraiment utilisées comme ça au plein milieu du code.
Le but des références est clairement de remplacer les passages par adresse en C++ dans le cas où celui-ci n'était pas nécessaire, mais imposé. Il permet de créer un code plus clair .
Au final dis-toi que ça n'a pas grand chose à voir avec les adresses (même si c'est le cas implicitement). Une référence c'est juste la pour, en quelque sorte, donner un autre nom à une variable ^^.
Marsh Posté le 29-06-2007 à 13:06:26
aGaB a écrit : Bon ben je vais te répondre. Non on ne peut pas travailler avec les adresses pour ce qui est des références, car on ne peut pas modifier l'objet référencé en C++. D'ailleurs une référence doit être immédiatement initialisé
|
ok, merci pour ces explications
Marsh Posté le 26-06-2007 à 09:42:30
bonjour,
j'aimerais savoir quelle est la différence entre & et un passage par adresse dans une fonction ou ailleurs. En C le & permet de designer l'adresse d'une variable, en c++ j'ai l'impression que c'est un alias, mais je ne comprend pas bien la difference avec un pointeur ou un passage par adresse.
Par exemple :
quelle la différence avec :
merci