回 帖 发 新 帖 刷新版面

主题:求大虾帮忙解释下这个程序

#include <stdio.h>
main()
{
 int a=3,y;
 y=(++a)+(((++a)+(++a))+(++a));
 printf("%d\n",y);
}

这个程序在VC6.0上运行的结果是26,我实在是想不出是怎么算出来的,求高手指点一下

回复列表 (共3个回复)

沙发


结果是28
++i;是先加后运算

板凳

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 楼

2楼xuhehao说得很对。
除非想自己做一个编译器,否则研究++i+++i这种东西,是没有意义的。
现在市面上常见的各种编译器,对这条语句,运行出来的结果可能各不相同。因此才说是“无意义的”。

感谢xuhehao给出这个链接:http://c-faq-chn.sourceforge.net/ccfaq/node37.html
建议楼主把这个链接所包含的《C语言常见问题集》完整的看一遍,这篇文档虽然基础,但都是重要的知识,没有花哨部分。只要看完一遍,肯定会收获良多。

我来回复

您尚未登录,请登录后再回复。点此登录或注册