ah! Pointer arithmetic 101.
&x est de type int* donc &x + 8 est 8 int plus loin que x. Avec un compilateur qui map int a un type 32-bit (4 bytes), &x + 8 est 32 octets apres x qui est ensuite caste en void*.
void* p2 = &x; fait le cast d'abors. Et ensuite ajoute 8. Le probleme est que c'est un pointeur vers un type void. Ce qui n'est pas defini dans la norme C. Et donc peut faire n'importe quoi. Cela etant dit, je n'ai jamais rencontre un compilateur qui ne traite pas void* comme char*. Donc p2 += 8; met p2 8 octets apres x.
Ca explique une difference de 24 entre les deux variables.
Note que faire de l'arithmetique sur void* n'est pas defini dans la norme. Si tu actives -pedantic dans gcc, tu obtiendras le message warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith].
Message édité le 16 août 2016 à 05:22:10 par godrik