请问 c语言中++a和a++的区别是什么, 不用告诉我是先加后用和先用后加 我知道这个 请举个例子

请问 c语言中++a和a++的区别是什么, 不用告诉我是先加后用和先用后加 我知道这个 请举个例子来说明 谢谢了。。。

/*
这个例子主要是考虑到a++和++a的存储问题;
我们知道,对于a++是先将a给表达式再++;
那么这就是需要一个tmp空间来保存++之前
的a!!!但是对于++a是不需要的,因为先
执行++,那么就是直接改a空间内容就好了!
那么我们下面的问题就是这样!
*/
#include <stdio.h>
int main()
{
int a = 4;
/*
解释:下面的答案在Linux和VC下测试是9;
如果这样的形式不好看,那么写成这样就
可以了:a = a + ( a++ );
那么由于a++是先把数放到tmp空间再++;
所以,执行顺序:把后面a放进tmp空间,然后
a的存储空间数++,那么现在a中是5,tmp中是4
最后a = a + tmp;所以最终结果==9
*/
a += ( a++ );
printf("a = %d\n\n", a);

/*
解释:这里和上面的区别就是++先后执行的
问题,执行顺序:先a++,那么此时的a中就是
5了,然后将这个结果也放进一个tmp空间,
最后在相加,那么结果就是:5 + 5 == 10
*/
a = 4;
a += ( ++a );
printf("a = %d\n\n", a);

/*
注意:下面的代码编译是通过不了的哦!为什么?
其实自最开始已经解释了!就是有没有tmp的问题!
注意a++是先把a给表达式,再++,那么对于左边
来说,其实给的存储空间是tmp而并不是a本身,对于
tmp来说是不可以被赋值的,只能是作为输入操作!!
所以。。。
*/
/*
a = 4;
(a++) += a;
printf("a = %d\n\n", a);
*/

/*
这个本质其实也是差不多的;
就是先有了++a放到a中了,那么相当于是a的初
始值是5,然后在执行:a += ( a++ );那么结果
就是11呗,呵呵~
*/
a = 4;
( ++a ) += ( a++ );
printf("a = %d\n\n", a);

return 0;
}追问

嗯 我写个看看

#include
main()
{
int a=6;
a=a+(++a);
printf("%d",a);
}

#include
main()
{
int a=6;
a=a+(a++);
printf("%d",a);
}

我现在明白执行过程了 谢谢啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-09

++a和a++在单一语句中没有任何区别,是等效的:

++a;
a++;

效果上一致,都是a增加了1。


在复合语句中,就是先加后用和先用后加的区别:

int a;
a = 1;
int i = ++a; //i为2,因为a先变成了2再赋值
a = 1;
int j = a++; //j为1,因为a先赋值给了j,再变成了2

第2个回答  2016-03-09
举个列子
int a = 2;
int b;
第一种情况b = a++; 那么这个b是等于2的,而a最后等于3,也就是a的值2先赋给b,然后a再++等于3
第二种情况b = ++a; 那么 这个b等于3,a也是3,这个运算顺序就是,先++a,a=3了,然后b=a,b也是3
相似回答