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