2008-11-30 10 views

Répondre

15

Oui, vous avez raison. Nous pouvons avoir des pointeurs sur des pointeurs:

int a; 
int b; 
int * pa = &a; 
int ** ppa = &pa; 

// set a to 10 
**ppa = 10; 

// set pa so it points to b. and then set b to 11. 
*ppa = &b; 
**ppa = 11; 

Lire de droite à gauche: ppa est un pointeur vers un pointeur vers un int. Ce n'est pas limité à **. Vous pouvez avoir autant de niveaux que vous le souhaitez. int *** serait un pointeur pointeur vers le pointeur vers int.

J'ai répondu à une question similaire à savoir si les variables primitives ont des adresses ici: Is primitive assigned a memory address?, il en va de même pour les pointeurs. En résumé, si vous ne prenez jamais l'adresse d'un objet, le compilateur n'a pas à lui assigner d'adresse: il peut garder sa valeur dans un registre.

12

Oui, vous pouvez avoir des pointeurs vers des pointeurs (ou des pointeurs vers des pointeurs vers des pointeurs), et oui, si nécessaire, des pointeurs sont également stockés à une adresse en mémoire.

Cependant, comme avec toutes les variables de pile, le compilateur est libre d'éviter d'écrire les données en mémoire, s'il peut déterminer que ce n'est pas nécessaire. Si vous ne prenez jamais l'adresse d'une variable et qu'elle n'a pas à survivre à la portée actuelle, le compilateur peut simplement conserver la valeur dans un registre. Un pointeur est juste une variable (emplacement de mémoire) qui stocke l'adresse d'autres variables.

2

Sa propre adresse peut bien sûr être stockée ailleurs.

Questions connexes