#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
你代码第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并不规范。
printf("%d\n",n);该函数有返回值,返回了输出的字符数'9','7',\n'共三个字符,所以返回3赋值给d