#include <stdio.h>
int main(void)
{
short x[12];
unsigned char *cp;
short *sp;
int *ip;
int i;
for (i = 0; i < 12; i++) {
x[i] = i + 1;
}
cp = (unsigned char *) x;
sp = (short *) x;
ip = (int *) x;
printf("1)*cp = %x\n",*cp);
printf("A)*ip = %x\n",*ip);
ip = ip + 2;
printf("B)*ip = %x\n",*ip);
cp[1]--;
printf("C) cp[1] = %d\n", cp[1]);
printf("D)*sp = %d\n",*sp);
sp[3] = sp[3] + 257;
printf("E) cp[6] = %x\n", cp[6]);
printf("F) cp[7] = %x\n", cp[7]);
return 0;
}
Ce code produit la sortie suivanteSortie C Pointeurs Pas clair
1)*cp = 1
A)*ip = 20001
B)*ip = 60005
C) cp[1] = 255
D)*sp = -255
E) cp[6] = 5
F) cp[7] = 1
Am sûr de la logique derrière tout cela. Est-ce que char non signé a besoin de quelque chose à faire avec la sortie. Je ne comprends pas pourquoi 20001 est sortie par pointeur entier ip et comment cp [6] est 5
[Quelle est la règle stricte d'aliasing et comment la contourner] (https://stackoverflow.com/q/98650/995714) –