Quelle est la différence entre un opérateur d'adresse et un opérateur de pointeur?


Réponse 1:

Aiguille

Un pointeur contient l'adresse mémoire d'une autre variable et doit être déréférencé avec l'opérateur "*" pour accéder à l'emplacement mémoire vers lequel il pointe.

Adresse ou référence

C'est comme un alias, c'est-à-dire un autre nom pour une variable déjà existante.

Une référence, comme un pointeur, est également implémentée en stockant l'adresse d'un objet.

Une référence peut être considérée comme un pointeur constant avec indirection automatique, c'est-à-dire que le compilateur appliquera l'opérateur * pour vous.

Par exemple:

int i = 3;

// Un pointeur sur la variable i (ou stocke

// adresse de i)

int * ptr = & i;

// Une référence (ou alias) pour i.

int & ref = i;

Différences:

1 - Réaffectation: un pointeur peut être réaffecté et est utile pour les structures de données telles que la liste liée, l'arborescence.

Par exemple:

int x = 4;

int y = 5;

int * p;

p = & x;

p = & y;

Alors que la référence ne peut pas être réaffectée et doit être affectée à l'initialisation.

Par exemple:

int x = 4;

int y = 5;

int & r = x;

2 -Adresse mémoire: Un pointeur a sa propre adresse mémoire et sa propre taille sur la pile alors qu'une référence partage la même adresse mémoire (avec la variable d'origine) mais prend également un peu d'espace sur la pile.

3 - Valeur NULL: Un pointeur peut être affecté directement à null, mais pas la référence.

4 - Indirection: Vous pouvez avoir des pointeurs vers des pointeurs vers des pointeurs offrant des niveaux supplémentaires d'indirection. Alors que les références n'offrent qu'un seul niveau d'indirection.


Réponse 2:

Imaginez que je ne connaisse pas votre adresse, mais que je souhaite vous laisser un SMS.

Je vous demande, vous ou quelqu'un d'autre, votre adresse. Je vais utiliser l'opérateur d'adresse pour cela.

john`s-messagebox-address = & john; / * Une variable contenant l'adresse d'une chose est un pointeur vers la chose. * /

Déplacez maintenant quelque chose dans la boîte de message en utilisant le pointeur sur l'adresse de la boîte de message.

* john`s-messagebox-address = "Ce fut un plaisir de vous rencontrer aujourd'hui."

AVERTISSEMENT: il s'agit d'un mauvais exemple à bien des égards. (1) Il ne prend pas en compte une limite de capacité ou de taille sur ce qui peut être laissé dans la boîte de message. (2) Tout ce que j'ai mis là-bas a remplacé ce qui avait déjà été là, ou du moins depuis le début, jusqu'à la fin de mon message, mais n'a pas effacé la queue du contenu précédent. (3) Quel que soit le message suivant, il recouvre le début du mien.