读书人

一个C程序有关问题请高手过目

发布时间: 2012-02-09 18:22:27 作者: rapoo

一个C程序问题,请高手过目!
#include <stdio.h>
int main()
{
int b[10];
printf( "%d\n ",sizeof(b));
if ((sizeof(b)) < -1)
{
printf( "Yes!\n ");
}
else
{
printf( "No!\n ");
}
return 0;
}

为什么在VC6下输出的是No?总不至于40没-1大吧?
如果用个变量来接受sizeof的结果,那么就是Yes,为什么?

[解决办法]
sizeof 操作符的结果类型是 size_t,size_t在头文件 <stddef.h> 中typedef为unsigned int类型。

可以把你的代码稍微的修改如下:

#include <stdio.h>
int main()
{
int a = 10;
printf( "%d\n ",a);
if ( a < -1)
{
printf( "Yes!\n ");
}
else
{
printf( "No!\n ");
}
return 0;
}
在这个时候打印的结果肯定是Yes,那我们肯定会奇怪,a = 10,10怎么可能小于 -1 呢?

原因很简单那就是在进行比较的时候,编译器把-1 转换为了无符号型,所以此时 10就小于 -1了。

你可以在比较的时候 在a的前面加上(long),强制类型转换,问题就解决了。

读书人网 >C语言

热点推荐