问题描述
- 在c语言下,关于自加运算符的问题
-
int a=1, b;
b=(a++)+2+a;求b的值?是4还是5?
请问是先把整个第二条语句运算完后,a再加1,还是执行完a+2后,a就加1?
解决方案
b=(a++)+2+a;
这行代码执行顺序是
b = a;
a++;
b = b+2+a;
所以是 b= 1+2+2=5;
解决方案二:
用VC++6.0实测最终结果为4。
a++,先引用,再自加,
b=1 + 2 + 1;
接着a++;
如果将后面的a也改成(a++),结果依然是4.
看下面例子:
先执行两次a++;
在用a的值替换表达式中的a
即b=5+5+2
这应该属于未定义行为,就是根据编译器的不同,结果可能不同(我用的是VC++6.0 ,你可以使用VS实测一下)
http://www.guokr.com/blog/471312/
所以尽可能的避免这种容易引起混乱的写法
解决方案三:
解决C语言自加的问题:(a++)*(++a)*(a++)*(++a);
关于c语言自加运算的问题(a++)
C语言运算符
解决方案四:
1+2+2=5;
a++和++a的区别在于谁在前
解决方案五:
程序是按照步骤来的,如果是a++的话,在那一行代码中,a的值是不变的,下一行才发生变化,++a则是在那一行已经发生了变化。
所以执行的顺序是
b=a=1
a++ //此时a的值变为2
b=b+2+a=5
解决方案六:
标准的未定义行为----------------------字数补全大法
解决方案七:
若是a++,就是计算分号式值,完了再a++,所以b=4后a=3
时间: 2024-12-21 19:24:46