【发布时间】:2012-01-02 11:25:53
【问题描述】:
我在 windows7 上使用 dev cpp 来编译我的代码。
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,它可以打印 e 的 4 个字节。但是如果我像下面这样使用 %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
【问题讨论】:
-
你应该停止使用 Dev-Cpp。它已经过时了,并且使用了一个古老的 GCC 版本。
-
为什么要将
(int*)转换为(float*)?编程已经够难了,因为没有这样的东西。
标签: c casting floating-point int printf