Logique de l'adressage des variables ?
Bonjour, je suis en train de préparer un petit exercice sur les pointeurs, et en faisant des tests sous visual c++, je viens de me rendre compte que je ne comprends pas comment le compilateur répartit les variables dans la mémoire de l'ordinateur.
En effet, voici une partie de mon programme :
Code:
1 2 3 4 5 6 7 8 9 10
| float a=0.001;
float b=0.003;
float c, *pa, *pb;
cout << "Adresses : " << endl;
cout << "&a = " << &a << endl;
cout << "&b = " << &b << endl;
cout << "&c = " << &c << endl;
cout << "&pa = " << &pa << endl;
cout << "&pb = " << &pb << endl; |
Le résultat me surprend :
&a = 0012FF64
&b = 0012FF68
&c = 0012FF6C
&pa = 0012FF5C
&pb = 0012FF60
D'une part, je ne comprend pas pourquoi dans la mémoire pa et pb sont placés avant a, b et c, alors qu'ils ont été déclarés après si on suit les instructions du programme.
Par ailleurs, j'ai essayé d'échanger les déclarations de a et b, en mettant float b avant float a, et à ma grande surprise l'affichage est le même : l'adresse de b est celle de a + 4 octets...
L'adresse des variables est-il determiné en fonction de leurs noms ? Au sujet de l'échange a - b, suis victime d'une sorte de cache de Visual Studio (qui ne reconsidère pas la déclaration des variables d'une compilation à une autre... ?)
Enfin, est-ce le même fonctionnement en C ?
Merci de bien vouloir m'éclairer mes chers amis.8-)