2011-11-22 130 views
-2

大家都知道我們不能在C中改變或修改一個常量變量。但是當我在一個常量變量上進行類型轉換時,它的值發生了變化。我的意思是,它不應該發生。是否可以對一個const變量進行類型轉換?

這是預期的行爲?

EDIT: 

main() 
{ 
    int const i=1; 
    printf("%d",(float)i); 
} 

輸出爲0

+0

爲什麼它不是一個真正的問題? –

+2

你能舉一個你嘗試過的例子嗎? –

+0

@AmitSinghTomar Huh? –

回答

3

是的,它的預期。類型轉換不會更改變量,它會將內存中的值重新解釋爲其他類型。

0

值不會改變,但你正在做prinf聲明誤解

#include<stdio.h> 

main() 
{ 
    int const i=1; 
    float k; 
    k=(float)i; 
    printf("in decimal %d\n",i); 
    printf("in float %f \n",(float)i); 
    printf("k is %f \n",k); 
    return 0; 
} 

看到它的輸出是

in decimal 1 
in float 1.000000 
k is 1.000000 

看到http://codepad.org/A2FWkncK

你的錯誤

k=(float)i; 

這種說法西港島線不會改變我的價值,但它會在浮動投我的價值,然後分配到k

printf("%f",i); 

這裏您打印由%F int值那麼它會給你錯誤的值

3

一個強制轉換不會「轉換一個變量」。

轉換適用於表達式,即首先評估您的值,然後轉換爲其他類型。

(另外,你的代碼的其餘部分是,好了,可改進的。請看看到允許原型爲main,始終把\nprintf結束。)

2
printf("%f",i); 

會解釋我作爲一個浮動。如果您在內存看,你會看到,我並沒有改變,而是它位於內存被重新解釋:

int const i=1; 
    0x0012FF60 01 00 00 00 //memory location of i 
    float k; 
    k=(float)i; 
    0x0012FF60 01 00 00 00 //i still the same 
    printf("%f",i); 
0

您的代碼不會改變const變量i的價值。它會將該值轉換爲float,並將結果存儲在k中,但不會將其拆分爲i

printf()呼叫未定義的行爲,因爲你已經使用了%f格式說明與int參數(當它需要一個double)。這是因爲1.000000的原因很可能是因爲您的架構的調用約定將浮點值傳遞到標量值的不同位置,並且浮點位置恰巧仍包含前一次轉換中的值k

相關問題