2014-11-16 75 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。