关于自加和自减的小白有关问题
关于自加和自减的小白问题
请问自加和自减是可以给a重新赋值的吗?第一个a++打印出来是100,先取值在运算,打印出来是100,实际上a的值已经变成101了是吗?然后第二个++a是先运算在取值,a就等于102了,下面--a和a--依次类推。
但是a+1按照前面的逻辑不是应该等于100吗?是优先级的原因吗?最后也是就算a+1等于101了,输出a为什么等于100呢,
小白求教,谢谢。
------解决思路----------------------
a+1不是a++.
100+1(a+1)怎么想也不会是100
a++是类似于a=a+1的, 也就是说a++是有赋值操作的
------解决思路----------------------
另外,++是一元运算符,它只作用于一个量,+是二元运算符,需要2个量
printf("%d\n",a++) 由于是一元运算符,只根据++位置对a操作,++运算完毕后,a的值发生改变
printf("%d\n",a+1) 由于是二元运算符,需要先完成a+1的运算,再输出,另外,a+1的结果是存在一个临时的内存中,a的值不会发生改变
------解决思路----------------------
完全无视表达式求值的顺序。
这个“传参”和“然后”用得好,意味着a++的副作用后序于参数传递。怎么这么肯定呢?
#include<stdio.h>
int main(){
int a=100;
printf("%d\n",a++); //100
printf("%d\n",++a); //102
printf("%d\n",--a); //101
printf("%d\n",a--); //101
printf("%d\n",a+1); //101
printf("%d\n",a); //100
return 0;
}
请问自加和自减是可以给a重新赋值的吗?第一个a++打印出来是100,先取值在运算,打印出来是100,实际上a的值已经变成101了是吗?然后第二个++a是先运算在取值,a就等于102了,下面--a和a--依次类推。
但是a+1按照前面的逻辑不是应该等于100吗?是优先级的原因吗?最后也是就算a+1等于101了,输出a为什么等于100呢,
小白求教,谢谢。
------解决思路----------------------
a+1不是a++.
100+1(a+1)怎么想也不会是100
a++是类似于a=a+1的, 也就是说a++是有赋值操作的
------解决思路----------------------
另外,++是一元运算符,它只作用于一个量,+是二元运算符,需要2个量
printf("%d\n",a++) 由于是一元运算符,只根据++位置对a操作,++运算完毕后,a的值发生改变
printf("%d\n",a+1) 由于是二元运算符,需要先完成a+1的运算,再输出,另外,a+1的结果是存在一个临时的内存中,a的值不会发生改变
------解决思路----------------------
完全无视表达式求值的顺序。
printf("%d\n",a++); //把a = 100传参进去,printf得到100,然后a自加得a=101
这个“传参”和“然后”用得好,意味着a++的副作用后序于参数传递。怎么这么肯定呢?