1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
typedef union
{
char t[20];
struct
{
char s[10];
union
{
char b[4];
unsigned int v :32;
} b;
char ss[6];
} s;
} u;
u k;
memset (&k, 0, sizeof(u));
k.t[10] = (char)1;
k.t[12] = (char)2;
k.t[16] = (char)3;
printf ("k.t[10] = %d\nk.t[12] = %d\nk.t[16] = %d\nsizeof(k.s.b) = %d\nPourquoi k.s.b ne commence qu'à k.t[12] alors que l'element k.s.s ne fait que 10 octets, l'élement devrait commencer à k.t[10], non ? Donc il y a 2 octets qui ne sont normalement pas utilisable, car ils sont entre k.s.s et k.s.b ... Je ne comprends pas ce résultat.\nQuand je remplace l'union k.s.b par un type char[4], ça s'aligne bien, mais au contraire si je mets un entier ... ça me refait la même chose que actuelement. J'en déduis que c'est à cause de mon entier, mais dans ce cas pourquoi ? Pourquoi ça ne s'alligne pas comme pour mon char[4] ... Je peux réduire de 2 octets l'élement précedent pour avoir un bon alignement, mais ça serait bidouiller, et je ne sais pas si ça généralise sur toutesl es machines ...", k.s.s[10], k.s.b.b[0], k.s.ss[0], sizeof(k.s.b)); |
Partager