一个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),强制类型转换,问题就解决了。