Bonjour, tout est écrit dans le code:
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
 
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));
Pourquoi 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.
Quand 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 ...
merci d'avance