请考虑以下代码:
#include<stdio.h>
int array[]={1,2,3,4,5,6,7,8};
#define SIZE (sizeof(array)/sizeof(int))
int main()
{
printf("%d",SIZE);
if(-1<=SIZE) printf("1");
else printf("2");
return 0;
}
我得到82作为输出,但如果我用if(-1<=SIZE)
替换if(0<=SIZE)
或用if(1<=SIZE)
替换if子句中的-1为0或非负数,那么我得到81作为输出。为什么我会得到不同的输出?
答案 0 :(得分:10)
sizeof
运算符返回size_t
,这是无符号整数类型。当您将-1
转换为无符号整数时,您会得到一个非常大的数字。
构建时打开更多警告,编译器会警告您比较有符号和无符号数据类型。