前言
狄泰软件唐老师的个人学习笔记
参考了C语言中文网,链接如下;
http://c.biancheng.net/cpp/html/3097.html
1、++ 与 - -
- 前置
- 变量自增(自减)
- 取值 - 后置
- 取值
- 变量自增(自减)
实验:说明前置与后置的区别
#include <stdio.h>
int main()
{
int a = 10, b = 20, c = 30, d = 40;
int a1 = ++a, b1 = b++, c1 = --c, d1 = d--;
printf("a=%d, a1=%d\n", a, a1);
//11, 11
//先执行 ++a,结果为 11,再将 11 赋值给 a1,所以 a1 的最终值为11。
//而 a 经过自增,最终的值也为 11。
printf("b=%d, b1=%d\n", b, b1);
//20, 21
// b 的值并不会立马 +1,而是先把 b 原来的值交给 b1,然后再 +1。b 原来的值为 20,
//所以 b1 的值也就为 20。而 b 经过自增,最终值为 21。
printf("c=%d, c1=%d\n", c, c1);
//29, 30
//先执行 --c,结果为 29,再将 29 赋值给c1,
//所以 c1 的最终值为 29。而 c 经过自减,最终的值也为 29。
printf("d=%d, d1=%d\n", d, d1);
//39, 40
//d的值并不会立马减 1,而是先把d原来的值交给 d1,然后再-1。
//d 原来的值为 40,所以 d1 的值也就为 40。而 d 经过自减,最终值为39
return 0;
}
而且需要分清的是,前置和后置,你不赋值给别人,没有区别,比如下面
#include <stdio.h>
int main()
{
int i = 0;
int y = 0;
i++;
++y;
printf("%d\n", i); // 1
printf("%d\n", y); // 1
}
2、问题
自增与自减不要与其他运算符混合使用,不同的编译器结果可能不同,这点是唐老师说的,涉及不同编译器用汇编代码的处理不同,导致结果不同,我也没听懂,咱还是就分开写吧,别头铁了
实验:
#include <stdio.h>
int main()
{
int a = 12, b = 1;
int c = a - (b--); // 11
//会先进行a-b运算,结果是 11,然后 b 再自减,就变成了 0;
//最后再将a-b的结果(也就是11)交给 c,所以 c 的值是 11。
int d = (++a) - (--b); //14
//对于d=(++a)-(--b),a 会先自增,变成 13,然后 b 再自减,变成 -1,
//最后再计算13-(-1),结果是 14,交给 d,所以 d 最终是 14
printf("c=%d, d=%d\n", c, d);
return 0;
}
#include <stdio.h>
int main()
{
int i = 0;
int r = 0;
r = (i++) + (i++) + (i++);
printf(" i = %d\n r = %d\n ", i, r);
r = (++i) + (++i) + (++i);
printf("i = %d\n r = %d\n ", i, r);
return 0;
}