2014-11-16 72 views
-3

sizeof的返回值是什麼?這個程序爲什麼會輸出錯誤?c中sizeof()的返回值?

#include <stdio.h> 

int main() 
{ 
     if(sizeof(int) > -1) 
       printf("true\n"); 
     else 
       printf("false\n"); 


return 0; 
} 

但這給出了答案。

#include <stdio.h> 

int main() 
{ 
     if((int)sizeof(int) > -1) 
       printf("true\n"); 
     else 
       printf("false\n"); 


return 0; 
} 
+0

看到這個並理解它的作用 - http://msdn.microsoft.com/en-us/library/0w557fh7.aspx – ha9u63ar

回答

3

爲什麼這個程序提供虛假的輸出?

if(sizeof(int) > -1) 

其原因是sizeof返回size_t(無符號),所以-1被比較之前轉換成無符號的。

根據標準:

6.3.1.8通常的算術轉換

....

否則,如果具有無符號整數類型的操作數的秩大於或 等於其他操作數的類型的等級,則具有 有符號整數類型的操作數被轉換爲具有無符號整數的操作數的類型 整數呃類型。

請注意,如果第二個操作數的級別較高,則結果會不同。我的編譯器爲truelong long

if (sizeof(int) > -1LL) 
0

sizeof回報size_tunsigned型)。您正在比較signed intunsigned int。當signed操作數與unsigned之一進行比較時,signed操作數被轉換爲unsigned值。

+4

'size_t'不一定是'unsigned int'。它可以是任何適合的無符號整數類型。 –

0

關鍵字sizeof後跟省略號返回參數包中元素的數量。 結果的類型是在頭文件中定義的unsigned整數類型size_t。 所以你正在比較一個unsigned int與一個有符號的int。