- 学习交流加(可免费帮忙下载CSDN资源):
- 个人微信: liu1126137994
- 学习交流资源分享qq群1(已满): 962535112
- 学习交流资源分享qq群2: 780902027
文章目录
1 ++和–操作符的本质
-
++ 和 - - 操作符对应两条汇编指令
-
前置:
- 变量自增(减)1
- 取变量值
-
后置
- 取变量值
- 变量字增(减)1
-
上述只是定义了 ++ 和 - - 操作符本身的取值与自增加减顺序。但是如果多个 ++ 或者 - - 操作符放在一起进行运算呢?像下面这样?
-
你觉得上述两个表达式的值分别是多少?或许你心中已经有答案,但是我们不妨先写代码验证一下:
-
代码 17-1.c
#include <stdio.h>
int main()
{
int i = 0;
int r = 0;
r = (i++) + (i++) + (i++);
printf("i = %d\n", i);
printf("r = %d\n", r);
r = (++i) + (++i) + (++i);
printf("i = %d\n", i);
printf("r = %d\n", r);
return 0;
}
- 编译运行结果为:
i = 3
r = 0
i = 6
r = 16
-
这个答案呢,与我们所想的稍微有所差别。最后一次r ,我们预想的应该是15 ,或者有的人认为应该是18 。但是最终结果却是16.这是为什么呢?
-
因为在 ++ 和 - - 的混合运算中,它们并不是原子操作。它们所对应的两条汇编指令,有可能不是连续执行,导致最终结果有误。
-
比如上述代码中,13行的计算中,(++i)+(++i)+(++i)中,有可能是第一个i先++,然后第一个i取值为4,然后第二个i再++不取值,第三个i再++不取值,然后第二个括号取值此时i=6,然后第三个括号取值i=6 。 那么整个表达式就是4+6+6=16 。当然,这只是一种情况,还有很多种情况,不同的情况,最终结果都有可能不一样。
-
只是本次使用我的编译器,是这样的情况而已。使用其他编译器或许结果就是不一样的。
最终得出一个结论,就是 ++ 和 - -混合运算的计算结果是不确定的。
2 总结
- ++ 和 - - 在混合运算中,行为可能不同
学习交流加
- 个人qq:
1126137994- 个人微信:
liu1126137994- 学习交流资源分享qq群:
962535112