问答详情
源自:2-8 自动类型转换

请问没有给d赋值,为什么会输出3呢?

#include <stdio.h>
int main()
{
    char c = 'a';
    int n = c;      //将c赋值给n
    float f = c;    //将c赋值给f
    double d =      //******注意看这里******
    printf("%d\n",n);
    printf("%f\n",f);
    printf("%lf\n",d);
    return 0;    
}

请问没有为什么给d赋值,输出结果却为3呢?

97
97.000000
3.000000

提问者:hanfeng1949 2015-04-26 14:52

个回答

  • onemoo
    2015-04-26 15:56:17
    已采纳

    你代码第6行 double d = 后面并没有分号,不算作语句结束,编译器会继续将后面的语句连起来(换行不代表语句结束),所以代码会变成这样:

    double d = printf("%d\n", n);

    就是将printf函数的返回值作为d的初值。而printf函数的原型是这样的:

    int printf(const char *format, ...);

    printf函数如果执行成功会返回输出的字节数,不成功会返回一个负值。刚好这个printf语句会输出"97\n",注意97后面还有个换行符,所以返回值是3,类型是int。这个3就会用于初始化d,这过程中会发生类型转换,int型会转换成double,值不变,所以d的值就是3。

    还有,你在用printf输出double和float型时,都应该使用%f,%lf并不规范。

  • Absolute_Duo
    2015-04-26 15:51:31

    printf("%d\n",n);该函数有返回值,返回了输出的字符数'9','7',\n'共三个字符,所以返回3赋值给d