有如下:#include<stdio.h>
main()
{
int j=3;
printf("%d\n%d",++j,j++);
printf("\n%d\n%d",j++,++j);
}
为什么会输出5 3
6 7
呢,这个是这样分的,按照++和--的,不是应该输出 吗 4 4
4 5
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
printf("%d\n%d",++j,j++); 这样的代码的行为是“未定义的”
自增/减运算符构成的表达式,对操作数的自增/减算是表达式的“副作用”,这副作用并不保证和表达式求值同时发生。
以你这个函数调用是参数求值为例。函数的两个参数都是自增表达式。那么 ,是++j 先算还是 j++ 先算呢? 答案是:不确定! 而且关键是这两个自增表达式还是对同一个变量自增的,那么 ++j 中的 j 会在 j++ 之前自增吗? 还是别的情况? 答案也是:不确定! 所以这句 printf 打印出什么都有可能。
像自增这样有副作用的表达式,如果你不确定它的副作用的发生顺序,那最好一句中只用一个这样的表达式。
比如像 @xungeer29 说的那样分开写,就能得到确定的结果了。
xungeer29
TA贡献46条经验 获得超20个赞
你输出 printf("%d\n",++j); printf("%d\n",j++); printf("%d\n",j++); printf("%d\n",++j); 试试,4457
- 2 回答
- 0 关注
- 2061 浏览
添加回答
举报
0/150
提交
取消