請(qǐng)問沒有給d賦值,為什么會(huì)輸出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;???? }
請(qǐng)問沒有為什么給d賦值,輸出結(jié)果卻為3呢?
97
97.000000
3.000000
2015-04-26
你代碼第6行 double d = 后面并沒有分號(hào),不算作語句結(jié)束,編譯器會(huì)繼續(xù)將后面的語句連起來(換行不代表語句結(jié)束),所以代碼會(huì)變成這樣:
就是將printf函數(shù)的返回值作為d的初值。而printf函數(shù)的原型是這樣的:
printf函數(shù)如果執(zhí)行成功會(huì)返回輸出的字節(jié)數(shù),不成功會(huì)返回一個(gè)負(fù)值。剛好這個(gè)printf語句會(huì)輸出"97\n",注意97后面還有個(gè)換行符,所以返回值是3,類型是int。這個(gè)3就會(huì)用于初始化d,這過程中會(huì)發(fā)生類型轉(zhuǎn)換,int型會(huì)轉(zhuǎn)換成double,值不變,所以d的值就是3。
還有,你在用printf輸出double和float型時(shí),都應(yīng)該使用%f,%lf并不規(guī)范。
2015-04-26
printf("%d\n",n);該函數(shù)有返回值,返回了輸出的字符數(shù)'9','7',\n'共三個(gè)字符,所以返回3賦值給d