社区
C语言
帖子详情
一个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
打赏
收藏
一个C程序问题,请高手过目!
#include 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,为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
你编译器游问题。。
修练8年C++面向对象
程序
设计之体会
修练8年C++面向对象
程序
设计之体会原文:http://apples.blog.51cto.com/303012/58249 六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行
程序
中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。软件工程中的时髦术语“面向对象分析”和“面向对象设计”,通常是针对“需求分析”和“系统设计”环节的。“面向对象”有几大学派,就象如来佛、上帝和真主用各自的方式定义了这个世界,
C++面向对象
程序
设计思想(精)
转载C++面向对象
程序
设计思想(精) C++面向对象
程序
设计 六年前,我刚热恋”面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行
程序
中滚爬出来准备写点心得体会时,却无法解释什么是”面向对象”,就象说不清楚什么是数学那样。 软件工程中的时髦术语”面向对象分析”和”面向对象设计”,通常是针对”需求分析”和”系统设计”环节的。”面向对象”...
请
帮忙看看这个
程序
的运行结果为何这样怪
请
高手
帮忙看看下面
程序
的运行,不知道为何不能正常显示结果。改
程序
的目的是解释C语言的声明,如输入 char **p 应该显示 p: pointer to pointer to char 如果输入 int *daytab[13] 应显示 daytab: array[13] of pointer to int 前者能正常运行,但后者在输入int *daytab[13 回车后却不再执行了,
C++面向对象
程序
设计之体会
转载地址:http://pcedu.pconline.com.cn/empolder/gj/c/0504/609482_all.html#content_page_1 六年前,我刚热恋“面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行
程序
中滚爬出来准备写点心得体会时,却无法解释什么是“面向对象”,就象说不清楚什么是数学那样。软件工程中的时
教你炒股票9:甄别“早xie”男的数学原则!
(2006-11-22 12:00:00 设计
一个
程序
,将所有投资对象进行分类,只搞那些能搞的,这是投资的第一原则。在分类中,所应用的
程序
可以各色各样,但有一点是肯定的,即没有任何
一个
程序
可以使得所选能搞的最终都百分百能被搞得高潮迭起,就像没有任何
一个
挑选面首的
程序
使得所选能搞的最终都能百分百被搞得高潮迭起。因为任何操作
程序
都必然面对“早泄”
问题
,就像任何关于面首的选择都必然面临“...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章