Я использую dev cpp на windows7 для компиляции моего кода.
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %d | %x | %#1x | %#1x | %#1x |%p\n", d, e[0], e[1], e[2], e[3], &e[0]);
getchar();
4 4
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43
18 | 12 | 0 | 0 | 0 |0028FF40
Вы видите, что, если я использую% d для печати d, он печатает 4 байта e нормально. Но если я использую% f, как показано ниже, он показывает нули в том месте, где должен быть напечатан первый байт e. Кто-нибудь может помочь с тем, почему это происходит? Почему содержание e должно зависеть от того, как отформатировано d?
int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %f | %x | %#1x | %#1x | %#1x |%p\n", d, e[0], e[1], e[2], e[3], &e[0]);
getchar();
Вывод:
4 4
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43
0.000000 | 0 | 0 | 0 | 0x28ff40 |76869F1D