i++ 后加加,原理:先自增,然后返回自增之前的值
++i 前加加,原理:先自增,然后返回自增之后的值
重点:不论++在前或++在后,都有个共同点是先自增(逻辑关键点)
例如:i++是先返回i的值,然后再自增,这是错误,是先自增,然后再返回自增之前的值
很多人对这两个逻辑不以为然,但这往往是解题关键
i++原理:
int temp = i;
i = i + 1;//i自增
return temp; //返回自增前的值
++i原理:
int temp = i;
i = i + 1;//i自增
return i; //输出i自增后的值
例:
int i = 0;
i = i++;
cout<<i<<endl; // 结果:i=0
分析:
- 先看i++,i 自增等于 1,但是又返回自增之前的值0(i此时的真实值为1,是i++的值为0)
- 把0赋值给右边的i,i的值变为0
在运算过程中还要牢记表达式原则:
一个变量也是表达式,多个表达式的加减法运算都是从左到右进行的(不要和优先级弄混)
例:
int a = 2;
int b = (3 * a++) + a;
cout<<b<<endl; // 结果:b=9
分析:
- int b = (3 * a++) + a,
- int b = (3 * 2) + a,此时a的值已经为3
- int b = (3 * 2) + 3; b = 9,a=3
int a = 2;
int b = a + (3 * a++);
cout<<b<<endl;// 结果:b=8
分析:
-
int b = 2 + (3 * a++),遵从表达式原则,a=2.
-
int b = 2 + (3 * 2),a++后,a = 3,但a++返回自增之前的值2
-
int b = 2 + (3 * 2),b=8,a=3
两个例子加深理解:
int i = 1;
int j = 1;
int k = i++ + ++i + ++j + j++;
cont<<k<<endl; // 结果:8
分析:
- i++,i=2, i++=1
- ++i, i=3, ++i=3
- ++j, j=2, ++j=2
- j++, j=3, j++=2
int a = 0;
int b = 0;
a = a++;
b = a++;
cout<<a<<b<<endl; // 结果:a = 1, b = 0
分析:
- a=a++,a++后a=1,a++=0,a++将0赋值给a,a=0
- b=a++,a++后a=1,a++=0,a++将0赋值给b,b=0
不是纯原创,侵删