C语言中a++与++a的解释

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:15:18
main()
{
int b,a=2;

b=(++a)+(++a) ;
printf("b=%d\n",b);
这样输出b的值怎么是8呢?
main()
{
int b,a=2;
printf("b=%d\n",b=(++a)+(++a));

这样输出b的值怎么又变成7了??

就这个问题都把我给弄糊涂了,还怎么区分++a与a++呢?
请各位高手帮帮这个菜鸟吧!!
如果可以,请提供一个编译器吧,我的电脑是xp系统 繁体版的<没办法,老板是台湾人>
我现在用的是win-tc的

这个不是你的问题.和你的编译器有关

C语言明确规定"求值顺序未定义"

因此,不要在同一条语句中,多次修改同一个变量的值

因为编译器不知道是先计算你的后面的一个++a呢还是计算你的

前面的那个+a,对于不同的编译器可能会给出不同的结果

所以我也就不解释了,总之,不要在同一条语句中多次修改同一个变量的

值,这是未定义的,不同的编译器会给出不同的解决方法

要编译器啊,VS2005和VS2008都比较好
下面是我回答别人的
http://zhidao.baidu.com/question/53297700.html

后面的也是8啊~
我刚试的~

与编译器有关

第一个,编译器认为+号左右两边优先级相等,所以先执行它们,结果此时++a了两次,a=4,4+4 = 8

第二个,因为是printf内部的表达式,所以需要进行从右至左压栈,而且在压栈的过程中进行计算.右边的++a先得到3,3作为临时变量压入栈中,左边的 ++a得到4,4+3 = 7

++a和a++的作用是一样的,都是a自增1,但是++a返回自增后的值,a++返回自增前的值

如:

int a = 3;
int b = ++a;

那么a=4,b=4


int a = 3;
int b = a++;

那么a=4,b=3

明白没?

例如: b = a++
就是先把a 的值给b 然后a 在自加 也就是b!=a
b = ++a
是a 先自加 再给b 也就是 a = b
楼上说的很对

编译器 wintc