免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3118 | 回复: 15
打印 上一主题 下一主题

sizeof的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-16 09:27 |只看该作者 |倒序浏览
int b,a=3;
b=sizeof(a++);

问执行完这两条语句后a和b的值?
得到的结果是:
a==3, b==4

为什么a是3呢?不是有一次自增运算吗?

[ 本帖最后由 rossini23 于 2008-1-16 09:48 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-16 09:31 |只看该作者
a++是后加,表达式的值求出后a才执行自己的++运算.

论坛徽章:
0
3 [报告]
发表于 2008-01-16 09:45 |只看该作者
大一?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2008-01-16 09:55 |只看该作者
原帖由 cugb_cat 于 2008-1-16 09:31 发表
a++是后加,表达式的值求出后a才执行自己的++运算.


阴沟里翻船了吧
sizeof()的结果和变量的值无关吧

我在项目组参考GCC4的特性,制定如下编程规范
所有++,--,只允许以独立语句存在
比如:
a = (b++) + (c ++);
是非法语句
必须写成:
b++;
c++;
a = b + c;

论坛徽章:
0
5 [报告]
发表于 2008-01-16 09:59 |只看该作者

回复 #1 rossini23 的帖子

我觉得sizeof是函数,a是pass by value,所以只是个临时变量,当sizeof返回时a的值还是不变。

论坛徽章:
0
6 [报告]
发表于 2008-01-16 10:03 |只看该作者

回复 #5 liht1981 的帖子

sizeof是操作符哦

论坛徽章:
0
7 [报告]
发表于 2008-01-16 10:06 |只看该作者

回复 #4 safedead 的帖子

又没说sizeof的关系,sizeof只是一个运算符而已
记得根据++的语意,只有个整个表达式求值完毕后才对变量进行自增运算.所以你的例子的值确定的,项目规范是另一回事.

论坛徽章:
0
8 [报告]
发表于 2008-01-16 10:07 |只看该作者

回复 #5 liht1981 的帖子

sizeof与+ - * /等是一回事,只是优先级不同而已.
journ 该用户已被删除
9 [报告]
发表于 2008-01-16 10:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2008-01-16 10:43 |只看该作者
sizeof是一个操作符,b=sizeof(a++)语句中,b的值编译时就确定了,被直接替换成常量,相当于编译后a++这个语句就消失了,因此这条语句执行后a依然是3,并没有加1。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP