Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

difference entre reference et pointeur ?

35 réponses
Avatar
news.free.fr
bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.

Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.

y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?

merci a vous

Laurent

10 réponses

1 2 3 4
Avatar
Marc Boyer
news.free.fr wrote:
Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.


Pourquoi pas ?
On peut tout faire avec une boucle do {} while(); et pourtant on
a ajouté un repeat et un for.

y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?


Une référence ne peut pas être nulle. Cela donne une information
en plus pour le programmeur.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Pierre Maurette
"news.free.fr" a écrit:

bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.

Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.
[Ma réponse n'est pas, loin de là, celle d'un spécialiste, mais celle

de quelqu'un qui s'est lui-même posé ces questions. Donc, indulgence
par rapport aux approximations et erreurs SVP]

Je ne suis pas trop favorable au terme "passage par adresse".
Historiquement, le C a fourni la base (non objet) du C++. Il
n'existait qu'une seule façon de passer des paramètres à une fonction,
c'était (et c'est toujours) le passage de valeurs (typées).
Passer par valeur des variables de type pointeur permet de faire tout
ce qui se fait dans d'autres langages en utilisant le "passage par
variable".

C++ crée un type dérivé, la reference. C'est d'après moi une façon
d'introduire l'idée de passage (et retour) par variable en conservant
la définition originales des fonctions (une entourloupe ?). On écrit
simplement qu'une fonction reçoit ou renvoie la valeur d'une variable
(très très spéciale) d'une variable de type reference.

Toute tentative d'exemplifier la notion de référence en dehors du
contexte d'une fonction conduit AMHA à une incompréhension. On peut
bien entendu faire tourner du code, mais son inutilité est flagrante
et gêne "l'apprenti".

J'aime bien voir une reference comme un objet du dialogue
programmeur-compilateur, n'ayant à la différence du pointeur aucune
réalité dans l'exécutable. D'ailleurs, c'est le plus souvent par un
pointeur que le compilateur va résoudre une reference. On met là le
doigt sur la différence entre C et C++ au plan de l'abstraction.

y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?
Je ne vois pas d'exemple de passage par reference qui ne pourrait pas

être résolus de façon traditionnelle par un pointeur (mais ça doit
bien exister). Regardez plutôt du coté des reference en retour, en
particulier dans l'écriture des opérateurs.

--
Pierre

Avatar
Andre Heinen
On Mon, 22 Nov 2004 11:53:43 +0100, "news.free.fr"
wrote:

bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.


Les pointeurs ne conviennent pas pour la surcharge des
opérateurs. Il vaut mieux utiliser des références dans ce cas.

On ne peut pas utiliser de références dans les conteneurs de la
bibliothèque standard. Dans ce cas, il faut utiliser des
pointeurs. Par exemple, il faut utiliser vector<X*> au lieu de
vector<X&>.

Il est garanti qu'une référence "pointe" toujours sur quelque
chose. Elle ne peut pas être nulle. Il est préférable
d'utiliser des références sauf si on a besoin de la valeur nulle.

Une référence, une fois initialisée, ne peut plus être modifiée
pour "pointer" sur un autre objet. Il vaut mieux utiliser les
références sauf si on a besoin de changer l'objet pointé (p. ex.
arithmétique de pointeurs).

Si une fonction modifie son argument, certains programmeurs
trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend
plus explicite le fait que la fonction peut modifier l'argument.
Par exemple f(&i).
D'autres programmeurs utilisent des références mais choisissent
un nom de fonction explicite, par exemple modifier(i).

Va voir la FAQ de Stroustrup:
http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references
Et aussi, bien sûr, la section 8 de la FAQ de ce groupe.

--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz

Avatar
Arnaud Meurgues
Andre Heinen wrote:

Si une fonction modifie son argument, certains programmeurs
trouvent qu'il vaut mieux utiliser un pointeur parce que ça rend
plus explicite le fait que la fonction peut modifier l'argument.
Par exemple f(&i).
D'autres programmeurs utilisent des références mais choisissent
un nom de fonction explicite, par exemple modifier(i).


On utilise plutôt "const" pour signifier qu'on ne va pas modifier le
paramètre :

f(const <type> &i)


--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Richard Delorme
bonjour , je cherche a savoir quel est la différence entre une passage par
référence et un passage par adresse.

Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.

y a til des choses que le passage par référence peut faire que le passage
par adresse nepeut pas ?


Alléger l'écriture ?

--
Richard

Avatar
Gabriel Dos Reis
Pierre Maurette writes:

| C++ crée un type dérivé, la reference. C'est d'après moi une façon
| d'introduire l'idée de passage (et retour) par variable en conservant
| la définition originales des fonctions (une entourloupe ?).

?

-- Gaby
Avatar
Gabriel Dos Reis
Andre Heinen writes:

| Il est garanti qu'une référence "pointe" toujours sur quelque
| chose.

int& f() { int i = 0; return i; }

int main() { int& r = f(); return r; }

-- Gaby
Avatar
Loïc Joly
Marc Boyer wrote:

news.free.fr wrote:

Je sais ce qu'est un pointeur , mais c'est le pourquoi on a ajouté le
passage par référence au c++ alors qu'il existé deja la passage par adresse.



Pourquoi pas ?
On peut tout faire avec une boucle do {} while(); et pourtant on
a ajouté un repeat et un for.
^^^^^^

Ah bon ? ;)


--
Loïc


Avatar
Fabien LE LEZ
On 22 Nov 2004 11:19:35 GMT, Marc Boyer
:

On peut tout faire avec une boucle do {} while();


C'est marrant, tu cites là la structure de boucle la moins utilisée,
de très loin.


--
;-)

Avatar
kanze
Marc Boyer wrote in message
news:<cnsi07$rhj$...

[...]
Une référence ne peut pas être nulle. Cela donne une information en
plus pour le programmeur.


C'est vrai, mais je crois que la motivation initiale était de pouvoir
passer des temporaires par référence, plutôt que par valeur. Surtout aux
opérateurs : comment écrire quelque chose comme :

Matrix operator+( Matrix const&, Matrix const& ) ;

avec les pointeurs ?

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

1 2 3 4