user-0 提问: 关于自加和自减的小白问题

回复:
user: user-1
content: 带有a的表达式不影响a自身的值，比如a=20,则a+10的值是30，但是a的值依然是20.  a++属于自增表达式，既可等价于a = a+1,潜在的存在赋值过程。

user: user-2
content: ++a 是先加再取值 a++ 是取完值再加 但是两个都能让a的值增加1

user: user-3
content: a++自身改变，a+1自身不改变

user: user-4
content: 引用 18 楼 sholber 的回复:[quote=引用 17 楼 my_live_123 的回复:]  #include<stdio.h> int main(){    int a=100;    printf("%d\n",a++);          //把a = 100传参进去，printf得到100，然后a自加得a=101    printf("%d\n",++a);          //前缀++，先执行自加得a=102,然后把参数传102给printf，此时a=102    printf("%d\n",--a);           //前缀--，先执行自减得a=101，,然后把参数101传给printf，此时a=101    printf("%d\n",a--);           //把a = 101传参进去，printf得到101，然后a自减得a=100    printf("%d\n",a+1);         //a+1=101，传参101进去，此时a = 100    printf("%d\n",a);             //a=100    return 0; }   完全无视表达式求值的顺序。    printf("%d\n",a++);          //把a = 100传参进去，printf得到100，然后a自加得a=101 这个“传参”和“然后”用得好，意味着a++的副作用后序于参数传递。怎么这么肯定呢？ [/quote]    好吧，宏观上先这么理解吧。微观上对后缀自加自减，是先把旧值放到一个寄存器里，然后自加或自减后的值放入另外一个寄存器里，然后把A：旧值用于表达式，B：新值写回内存。至于A和B这个顺序和编译器有关了！目前都是先B后A！先A后B先也是正确的。因为都是寄存器里的值。

user: user-5
content: http://bbs.csdn.net/topics/370153775

user: user-6

user: user-7
content: 区别：a ++和++ a前者是先使用后加1，后者是先加1后使用，执行第一条语句printf("%d\n",a++); 属于先使用后加1，所以先打印100，然后加1变成101，在执行第二条语句printf("%d\n",++a);此时是先加1，再使用，所以打印出102，以下语句同上。

user: user-0
content: 引用 13 楼 user-12 的回复:另外，++是一元运算符，它只作用于一个量，+是二元运算符，需要2个量  printf("%d\n",a++)   由于是一元运算符，只根据++位置对a操作，++运算完毕后，a的值发生改变 printf("%d\n",a+1)   由于是二元运算符，需要先完成a+1的运算，再输出，另外，a+1的结果是存在一个临时的内存中，a的值不会发生改变  谢谢 很详细

user: user-0
content: 引用 10 楼 jiht594 的回复:[quote=引用 5 楼 z549069443 的回复:] [quote=引用 1 楼 u011041927 的回复:] a +1 时 a是100，运算过后，a还是100 我可以理解为 前面4个自加和自减都是依次给a赋值吗？后面的还是a=100。[/quote] 不论前置还是后置的++--都是赋值的. a+1没有赋值, a当然不变量[/quote]  谢谢 我不明白的地方就在这里原来是有赋值的

user: user-8
content: 引用 17 楼 my_live_123 的回复: #include<stdio.h> int main(){    int a=100;    printf("%d\n",a++);          //把a = 100传参进去，printf得到100，然后a自加得a=101    printf("%d\n",++a);          //前缀++，先执行自加得a=102,然后把参数传102给printf，此时a=102    printf("%d\n",--a);           //前缀--，先执行自减得a=101，,然后把参数101传给printf，此时a=101    printf("%d\n",a--);           //把a = 101传参进去，printf得到101，然后a自减得a=100    printf("%d\n",a+1);         //a+1=101，传参101进去，此时a = 100    printf("%d\n",a);             //a=100    return 0; }   完全无视表达式求值的顺序。    printf("%d\n",a++);          //把a = 100传参进去，printf得到100，然后a自加得a=101 这个“传参”和“然后”用得好，意味着a++的副作用后序于参数传递。怎么这么肯定呢？

user: user-4
content: #include<stdio.h> int main(){    int a=100;    printf("%d\n",a++);          //把a = 100传参进去，printf得到100，然后a自加得a=101    printf("%d\n",++a);          //前缀++，先执行自加得a=102,然后把参数传102给printf，此时a=102    printf("%d\n",--a);           //前缀--，先执行自减得a=101，,然后把参数101传给printf，此时a=101    printf("%d\n",a--);           //把a = 101传参进去，printf得到101，然后a自减得a=100    printf("%d\n",a+1);         //a+1=101，传参101进去，此时a = 100    printf("%d\n",a);             //a=100    return 0; }

user: user-9
content: 最后一个a+1,a不变的

user: user-10
content: 没有问题，你这个不复杂。 不是这种 a+++a+++++a.没这种就好看啊。

user: user-11
content: 引用 11 楼 sholber 的回复:[quote=引用 2 楼 jiht594 的回复:] a+1不是a++.  100+1(a+1)怎么想也不会是100  a++是类似于a=a+1的, 也就是说a++是有赋值操作的 这个可连类似都算不上。 前者，表达式的值是后缀++运算符的操作数的原值， 后者，表达式的值是运算符=左操作数修改后的存储值。[/quote] 我说的类似与a=a+1是相对与a+1之 你觉得a++和a=a+1或者a+1比, 哪个更像? 尤其是对于楼主不能理解为什么a++之后a变了, 而a+1不变.

user: user-12
content: 另外，++是一元运算符，它只作用于一个量，+是二元运算符，需要2个量  printf("%d\n",a++)   由于是一元运算符，只根据++位置对a操作，++运算完毕后，a的值发生改变 printf("%d\n",a+1)   由于是二元运算符，需要先完成a+1的运算，再输出，另外，a+1的结果是存在一个临时的内存中，a的值不会发生改变

user: user-12
content: printf("%d\n",a++);          //100 可以理解为    printf("%d\n",a);          //100    a =a +1; ===============================================    printf("%d\n",++a);          //102 可以理解为    a =a +1;    printf("%d\n",a);          //102

user: user-8
content: 引用 2 楼 jiht594 的回复:a+1不是a++.  100+1(a+1)怎么想也不会是100  a++是类似于a=a+1的, 也就是说a++是有赋值操作的 这个可连类似都算不上。 前者，表达式的值是后缀++运算符的操作数的原值， 后者，表达式的值是运算符=左操作数修改后的存储值。

user: user-0
content: 引用 3 楼 lin5161678 的回复:3+4 表达式的值是7  3的值是7吗？  显然不是阿，我意思就是前4个自加和自减都是依次给a赋值的吗？只存在自加减中，

user: user-0
content: 引用 1 楼 u011041927 的回复:a +1 时 a是100，运算过后，a还是100 我可以理解为 前面4个自加和自减都是依次给a赋值吗？后面的还是a=100。

user: user-0
content: 引用 2 楼 jiht594 的回复:a+1不是a++.  100+1(a+1)怎么想也不会是100  a++是类似于a=a+1的, 也就是说a++是有赋值操作的 我可以理解为 前面4个自加和自减都是依次给a赋值吗？后面的还是a=100。