主题:求大虾帮忙解释下这个程序
sencatan
[专家分:0] 发布于 2012-06-04 16:53:00
#include <stdio.h>
main()
{
int a=3,y;
y=(++a)+(((++a)+(++a))+(++a));
printf("%d\n",y);
}
这个程序在VC6.0上运行的结果是26,我实在是想不出是怎么算出来的,求高手指点一下
回复列表 (共3个回复)
沙发
黄喆喆good [专家分:0] 发布于 2012-06-11 22:53:00
结果是28
++i;是先加后运算
板凳
xuhehao [专家分:0] 发布于 2012-06-12 14:17:00
4.1 为什么这样的代码: a[i] = i++; 不能工作?
子表达式 i++ 有一个副作用 --- 它会改变 i 的值 --- 由于 i 在同一表达式的其它地方被引用, 这会导致无定义的结果, 无从判断该引用(左边的 a[i] 中)是旧值还是新值。(注意, 尽管 在 K&R 中建议这类表达式的行为不确定, 但 C 标准却强烈声明它是无 定义的, 参见问题 11.32。
源地址:http://c-faq-chn.sourceforge.net/ccfaq/node37.html
3 楼
eastcowboy [专家分:25370] 发布于 2012-06-15 21:21:00
2楼xuhehao说得很对。
除非想自己做一个编译器,否则研究++i+++i这种东西,是没有意义的。
现在市面上常见的各种编译器,对这条语句,运行出来的结果可能各不相同。因此才说是“无意义的”。
感谢xuhehao给出这个链接:http://c-faq-chn.sourceforge.net/ccfaq/node37.html
建议楼主把这个链接所包含的《C语言常见问题集》完整的看一遍,这篇文档虽然基础,但都是重要的知识,没有花哨部分。只要看完一遍,肯定会收获良多。
我来回复