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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.