Bonjour,
Bon le programme est en C++ mais la question est valable tant pour le C que pour le C++ :
Voici le résultat du programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include<iostream> using namespace std; union pack { unsigned int a[2]; long l; unsigned char b[8]; float f; }; int main (){ pack p[10]; pack* pp=p; cout << "Taille d'un pack : " << sizeof(pack)<<endl; cout << "Taille d'un float : " << sizeof(float)<<endl; (*p).l=0; cout<<(*p).a[0]<<"\t"<<(*p).a[1]<<"\t"<<(*p).l<<endl; (*p).a[0]=128; (*p).b[7]=128; cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t\t"<<(*p).a[1]\ <<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl; (*p).f=-4.128; cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t"<<(*p).a[1]\ <<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl; (*p).a[0]=0; cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t\t"<<(*p).a[1]\ <<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl; }
Ma question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Taille d'un pack : 8 Taille d'un float : 4 0 0 0 0x7fff6ec525d0 : 128 2147483648 -9223372036854775680 1.79366e-43 0x7fff6ec525d0 : 3229882515 2147483648 -9223372033624893293 -4.128 0x7fff6ec525d0 : 0 2147483648 -9223372036854775808 0
Pourquoi le premier octet du long l est le char b[7] alors que, apparemment, le premier octet du float f est b[0] ?
On dirait que le float est placé à partir de la fin de l'union...
Merci pour vos éclaircissement
Partager