3

考虑下面的代码:

#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 子句中用 0 或非负数替换if(-1<=SIZE)if(0<=SIZE)或表示 -1,那么我得到 81 作为输出。if(1<=SIZE)为什么我得到不同的输出?

4

1 回答 1

10

sizeof运算符返回一个size_t无符号整数类型。当您转换-1为无符号整数时,您会得到一个非常大的数字。

构建时打开更多警告,编译器会警告您比较有符号和无符号数据类型。

于 2012-10-08T13:37:39.397 回答