Accroché geeksforgeeks sur les bitfields, ont trouvé cet exemple:Mixing bitfields dans les structures
#include <stdio.h>
struct test {
unsigned int x;
long int y : 33;
unsigned int z;
};
int main() {
struct test t;
unsigned int *ptr1 = &t.x;
unsigned int *ptr2 = &t.z;
printf("%d", ptr2 - ptr1);
return 0;
}
En conséquence, la production est 4. Mais pourquoi? x occupe 4 octets, y - 8, et z - 4. Différence dans les adresses x et z doit être 8?
La différence entre deux pointeurs n'est pas comptée en octets, mais dans le type de point indiqué par les pointeurs. De plus, 'type' est aligné sur l'alignement du membre le plus aligné (probablement' long int'), et '& test.x == & test', donc si' sizeof (unsigned)! = Sizeof (long int) ', il y a est un espace d'alignement (remplissage) entre 'test.x' et' test.y', à condition que l'implémentation accepte même les champs de type 'long int'. – EOF
Je ne cesse d'entendre parler de ce "geekforgeeks" dans chaque message qui contient un comportement affreux, mal spécifié, code non-sens. Je pense vraiment que vous devriez éviter ce site, il ne semble pas qu'ils sachent de quoi ils parlent. – Lundin
Lundin: Peut-être que je peux être d'accord, je l'ai trouvé il y a quelques jours ... Mais de toute façon, cet exemple "cheval sphérique dans le vide" difficile, m'a lutté :) – artsin