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

来源:2-8 自动类型转换

hanfeng1949

2015-04-26 14:52

#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

写回答 关注

2回答

  • 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并不规范。

    onemoo 回复j0nny

    但是用 %lf 并不规范。 这就是槽点所在:本站的C语言课程十分业余...

    2015-06-14 10:23:22

    共 2 条回复 >

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

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

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926025 学习 · 20793 问题

查看课程

相似问题