一个C程序问题,请高手过目!

DirectRay 2007-06-05 04:08:28
#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,为什么?
...全文
427 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wht6688 2007-06-06
  • 打赏
  • 举报
回复
同意楼上
olla168 2007-06-06
  • 打赏
  • 举报
回复
应该和编译器没有关系的!编译器如果遇到混和运算都是将int转换成unsigned int再进行计算,什么样的编译器都是这个结果!
olla168 2007-06-06
  • 打赏
  • 举报
回复
sizeof()结果是unsigned类型,而当int和unsigned int混和运算的时候编译器会自动将int转换成unsigned int,-1就被看成一个很大的数了,所以sizeof(b)<-1为真!打印yes

zhangyq73 2007-06-06
  • 打赏
  • 举报
回复
一无符号整型和一符号整型比较结果为真(非0)
huashizhixin 2007-06-05
  • 打赏
  • 举报
回复
sizeof()的返回值类型是size_t,至于size_t是什么类型需要查看它的定义,有可能是unsigned或者signed的.
bamboostflying 2007-06-05
  • 打赏
  • 举报
回复
无符号是不能和带符号的数比较的,vc编译的时候会报错的
redboot 2007-06-05
  • 打赏
  • 举报
回复
up
ammana_babi 2007-06-05
  • 打赏
  • 举报
回复
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),强制类型转换,问题就解决了。
sss_free 2007-06-05
  • 打赏
  • 举报
回复
改成((int)sizeof(Buff)<-1)就可以了
printf("%u"(unsigned)-1);输出是:4294967295
sss_free 2007-06-05
  • 打赏
  • 举报
回复
如果用个变量来接受sizeof的结果,那么就是Yes,为什么?
什么类型的变量接受?打印出来看看
qhl1229 2007-06-05
  • 打赏
  • 举报
回复
4楼说的基本正确.这和编译器有关,至少VC6是这样处理的.
shiftqiang 2007-06-05
  • 打赏
  • 举报
回复
你的代码试验过了,vc下——结果是:40 yes;
代码没有问题,具体是什么为题我就不知道了。
millky 2007-06-05
  • 打赏
  • 举报
回复
X86 40 yes!
DirectRay 2007-06-05
  • 打赏
  • 举报
回复
已经经过N台电脑测试。
chai2010 2007-06-05
  • 打赏
  • 举报
回复
sizeof一般好像是unsigned类型,
如果-1和unsigned类型比较,
也会被处理为unsigned类型,
这样的话-1就比较大了.

不知道对不对.
expter 2007-06-05
  • 打赏
  • 举报
回复
X86 40
YES!
expter 2007-06-05
  • 打赏
  • 举报
回复
你编译器游问题。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧