Bonjour,

Bon le programme est en C++ mais la question est valable tant pour le C que pour le C++ :
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;
 
}
Voici le résultat du programme :
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
Ma question :

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