12、自增(++) 与 自减 ( - -)、
前言
狄泰软件唐老师的个人学习笔记
参考了C语言中文网,链接如下;
http://c.biancheng.net/cpp/html/3097.html
1、++ 与 - -
- 前置
- 变量自增(自减)
- 取值 - 后置
- 取值
- 变量自增(自减)
实验:说明前置与后置的区别
#include
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 经过自减,最终值为39return 0;
}
而且需要分清的是,前置和后置,你不赋值给别人,没有区别,比如下面
#include int main()
{int i = 0;int y = 0;i++;++y;printf("%d\n", i); // 1printf("%d\n", y); // 1
}
2、问题
自增与自减不要与其他运算符混合使用,不同的编译器结果可能不同,这点是唐老师说的,涉及不同编译器用汇编代码的处理不同,导致结果不同,我也没听懂,咱还是就分开写吧,别头铁了
实验:
#include
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 最终是 14printf("c=%d, d=%d\n", c, d);return 0;
}
#include 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;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
