2011-12-02 38 views
0

我測試下面的代碼Z:的sizeof(Z + 100),對於char類型

char ch,z=120; 
int x=5; 
double y=7.5; 
printf("\nsize of (z+100): %d" , sizeof(z+100)); 

我得到的輸出是:

size of (z+100): 4 

有人可以解釋我這樣的結果? 我認爲輸出必須是

size of (z+100): 1 

由於炭的THA的範圍是0 ... 255和100 = 120處於範圍... 謝謝

+0

嘗試'sizeof(z +(char)100)'; – Cyclonecode

回答

4

表達z + 100是加上類型爲charint的算術運算數(數字文字100在C中被認爲是一個整數)。

該語言的規則規定,這種算術加法的結果也是intsizeof(int) == 4(至少在您當前的編譯器下)的結果。

+1

錯誤。它將一個'int'(或'unsigned int')添加到另一個'int'。 @VladLazarenko說'char'被提升爲'int'。 – ninjalj

+0

@ninjalj:表達式實際上是將'char'加到'int'中。這是由編譯器根據標準將'char'提升爲'int'來處理的,但是a)標準本身說這兩個操作數必須有*算術類型*(不是'int'!)和b)這是而不是討論的核心,因爲操作的*結果*是'int'。我們在任何地方都不會不同意,但我認爲說我輕視不那麼重要的(對非標準的愛好者)部分是「錯誤的」是有點苛刻的。教人們關注重要的東西。 – Jon

+0

但事實是,即使'sizeof(z + z)'也會給出相同的結果。所以在這個意義上'100'是一個'int'並不重要。這裏的重要內容是,類型比「int」更窄的算術結果會導致「int」。 –

0

好像它是將其轉換爲int,這可以解釋的大小爲4,而不是1

0

我猜

sizeof(z + 100); 

導致隱式轉換爲int,其中有一個四個字節的大小。

1

sizeof表達式的計算結果爲一個無符號的size_t值等於 大小在「參數」的數據類型,變量或表達 的字節(帶數據類型,的sizeof計算結果爲數據類型的大小;用於 變量以及它評估的變量或表達式的類型的大小)。

既然你有charint表達式,編譯器整數提升轉換成charint,從而sizeof操作會給你int型,而你的情況是4個字節的大小。

相關問題