3 回答

TA貢獻883條經驗 獲得超454個贊
你說的是哪個“強制轉型”?? 從你發(fā)的另一個問題看,你可能對這些概念有些混亂,我一行行解釋吧:
double num = 2.5;
這句代碼是定義了一個 double 類型變量 num,并且賦予初值 2.5
int Num = (int)num;
這句是定義了 int 類型變量 Num,并以 num 初始化。
這里等號右側是 double 類型,左側是 int 類型,并不相符。這樣等號右側的 double 類型值會隱式轉型為左側的 int 類型,這個轉型后的值會被作為初值賦予 Num。所以這里本來就會發(fā)生隱式轉型,那個“強制轉型 (int)”是沒有必要的,可以去掉。
還有一點要注意:我寫的是“...右側的 double 類型值會隱式轉型...”。隱式轉型并不會改變 num 的類型,num 的類型永遠是聲明時的那個(也就是 double)。隱式轉型只是把 num 這個變量的值(浮點值 2.5)轉為整形值 2
我不知道你問的“有效條件”是什么意思。你的理解可能有誤,Num 不是臨時的!Num就是個正常的 int 類型變量。只是在初始化 Num 時、在確定初值的過程中,等號右側的 num 的值發(fā)生了一次隱式轉型而已(再強調一下,這對 num 不會有任何影響)
printf("...%d\n", Num);
printf 打印變量的值需要搭配相應的“格式化指示符”。Num 是 int 型,對應的格式化指示符是 %d,所以這句代碼沒有問題,打印出了 2
printf("...%f\n", Num);
那么這句就有問題了!
Num 是 int 型,不應該用 %f,所以輸出的內容不正確。
至于那個 #QNANO,它是提示“不是合法的浮點值”,這是當然的,因為 Num 根本就不是浮點類型。其實你不用管這個,你只要知道你用了不正確的格式化指示符,printf 就不能打印出正確的內容,打出什么奇怪的東西都有可能。
- 3 回答
- 0 關注
- 1365 瀏覽
添加回答
舉報