相关疑难解决方法(0)

这个程序如何运作?

#include <stdio.h>

int main() {
    float a = 1234.5f;
    printf("%d\n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它显示0!! 怎么可能?是什么原因?


我故意%dprintf声明中加入研究行为printf.

c c++ memory printf endianness

88
推荐指数
6
解决办法
6790
查看次数

如何在printf中处理float/double到int的转换?

考虑这个计划

int main()
{
        float f = 11.22;
        double d = 44.55;
        int i,j;

        i = f;         //cast float to int
        j = d;         //cast double to int

        printf("i = %d, j = %d, f = %d, d = %d", i,j,f,d);
        //This prints the following:
        // i = 11, j = 44, f = -536870912, d = 1076261027

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么从double/float到int的转换在第一种情况下正常工作,并且在printf中完成时不起作用?
该程序是在32位linux机器上的gcc-4.1.2上编译的.


编辑: Zach的答案似乎是合乎逻辑的,即使用格式说明符来确定从堆栈弹出的内容.但是请考虑这个后续问题:

int main()
{

    char c = 'd';    // sizeof c is 1, however sizeof …
Run Code Online (Sandbox Code Playgroud)

c

10
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×2

c++ ×1

endianness ×1

memory ×1

printf ×1