-1
votes

Comment comprendre l'adresse de l'adresse en C ++

Je regarde du code C ++ qui implique des adresses et rencontré certaines lignes que je ne comprends pas. xxx

Le code fonctionne comme prévu, mais je ne comprends pas la ligne où la variable X est attribuée à l'adresse de R. Ma compréhension est que ce serait une erreur puisque vous serez Affectation de la valeur stockée dans x à une adresse. Comment se fait-il que la ligne qui est commentée renvoie une erreur?


5 commentaires

Vous ne pouvez pas déclarer plus d'une fois. R est une référence à x déjà.


R est une référence, pas un pointeur. Pensez à des références comme des pointeurs où vous n'avez pas besoin d'utiliser explicitement & ou * .


Dans ce contexte (déclaration / définition), le & s'applique au int de gauche non le r et il forme un type de composé appelé "INT référence".


Note côté: int * r = & x; ferait r un pointeur sur int et capable d'accepter de stocker l'adresse d'un int (sans sauter à travers des cerceaux, je ne recommande généralement pas)


Le & a deux différentes significations. Apprenez la différence et tout ira bien.


3 Réponses :


0
votes

Je ne comprends pas la ligne où la variable X est attribuée à la adresse de r xxx

La ligne ci-dessus déclare un référence-to-int nommé r , et le fait référence à la variable déjà existante x . C'est dans n'importe quel code dans la fonction sous la ligne ci-dessous, r sera un alias pour x . xxx

La ligne ci-dessus (quand il est non motivé) produit une erreur car la valeur du côté droit du = est de type int * (c'est-à-dire qu'il est un pointeur-to-an-int ), tandis que la valeur du côté gauche du = est de type int & (c'est-à-dire que c'est une référence-to-an-int).

Dans les références C ++ Loi comme des pointeurs d'une certaine manière, mais en ce qui concerne leur syntaxe, ils suivent principalement les mêmes règles que le type à laquelle ils se réfèrent - ceci est parce qu'ils agissent comme des alias à une valeur de ce type. Donc, dans ce cas, comme vous ne pouvez pas affecter un pointeur à un int , vous ne pouvez pas affecter un pointeur à un int & soit: < Pré> xxx


0 commentaires

1
votes

Je ne comprends pas la ligne où la variable X est attribuée à l'adresse de r

La syntaxe de C ++ peut être déroutante ici, mais ce que vous voyez n'est pas une variable attribuée à une adresse.

Ici, l'ampersand a une signification différente: r est une variable de type int & , c'est-à-dire un Référence à un int. Cela ne signifie pas "Prendre l'adresse de R". Ce que cela signifie, plus ou moins, est que r est maintenant un alias de x . Il se comporte comme un int , pas comme un int * (pointeur sur int). Si vous imprimez leur valeur, vous constaterez que c'est la même chose, et si vous en changez l'un d'entre eux, vous modifierez également l'autre.

Vous pouvez regarder cette question pour une explication complète des références.


0 commentaires

1
votes

Un moyen de regarder Il est de déplacer le panneau de référence de xxx

à xxx

r est un int & - une référence IT un int , ce qui signifie que r ne libérera pas la mémoire allouée par x Lorsque r est hors de portée, mais ce sera une référence à x tandis que x vit. r est déclaré par la présente et sa déclaration ne peut pas changer, donc si vous essayez: xxx

il doit échouer - car r est déjà déclaré.

mais vous pouvez assigner quelque chose à quel que soit r est une référence à xxx

... Tant que la valeur type est convertible sur le type référencé par r (0-1 opérateurs de conversion).


0 commentaires