Ce que vous êtes en train de faire n'est pas d'avoir le pointeur pointe vers lui-même. Vous êtes à l'aide de l'espace mémoire alloué pour le pointeur pour stocker l'emplacement du pointeur. Un pointeur vers un int points à ints - jamais à d'autres pointeurs vers des entiers, y compris lui-même.
Par exemple, disons que vous créer un pointeur a
:
int * a;
Il obtient sa propre place dans la mémoire:
4 a (5) 6
[....][00000000][....]
Dans cet exemple simple, disons que a est à l'emplacement de la mémoire '5'.
Si vous le faites ceci:
a = (int*)&a;
...la suite arrivera:
4 a (5) 6
[....][00000005][....]
Ce qui se passe ici est que l' a
vers ce qu'il pense est un entier au lieu de 5. Cela se passe aussi pour être le même emplacement de mémoire &a
vers, mais dans le contexte de ce que l' a
'indique, il est maintenant de pointage à l'entier au lieu de 5 et de ce nombre entier est 5.
Par exemple, les deux de celles-ci:
cout<<(int)a;//outputs 5
cout<<*a;//Outputs the integer at memory location 5 - which is 5.
Si vous souhaitez créer un pointeur vers un, vous avez très certainement pu - l'une de ces façons:
int **b = (int**)a;
ou
int ** b = &a;
Mais il est très important de réaliser que, a
n'est pas un pointeur à lui-même. C'est un pointeur vers l' entier à l'emplacement des magasins - qui se trouve être la même que celle de son propre emplacement.
Pour de plus amples montrer (par un moyen encore plus simple exemple) ce qu'il se passe quelque chose de semblable pourrait se produire avec un int
. Qui est, vous pouvez stocker la mémoire de l'emplacement de l' int
à l'intérieur de lui-même:
int a=999;
a
a maintenant un emplacement dans la mémoire, et a une valeur de 999 (nous allons faire semblant il a été placé dans l'emplacement de mémoire '46'):
45 a (46) 47
[....][00000999][....]
C'est dans l'emplacement '46" - si nous le voulions, nous pourrions stocker ce nombre comme un entier dans a
:
a=(int)&a;
45 a (46) 47
[....][00000046][....]
et maintenant, a
est égal à &a
de la valeur, mais pas dans le type - a
est juste un entier, il n'a pas de point à lui-même comme par magie maintenant, juste parce que nous l'avons utilisé pour stocker son propre emplacement de mémoire.