猿问

希望能够帮帮我,不难,很基础

有如下:#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

XAGT
浏览 2062回答 2
2回答

onemoo

printf("%d\n%d",++j,j++);  这样的代码的行为是“未定义的”自增/减运算符构成的表达式,对操作数的自增/减算是表达式的“副作用”,这副作用并不保证和表达式求值同时发生。以你这个函数调用是参数求值为例。函数的两个参数都是自增表达式。那么 ,是++j 先算还是 j++ 先算呢? 答案是:不确定!  而且关键是这两个自增表达式还是对同一个变量自增的,那么 ++j 中的 j 会在 j++ 之前自增吗? 还是别的情况?  答案也是:不确定!  所以这句 printf 打印出什么都有可能。像自增这样有副作用的表达式,如果你不确定它的副作用的发生顺序,那最好一句中只用一个这样的表达式。比如像 @xungeer29 说的那样分开写,就能得到确定的结果了。

xungeer29

你输出 printf("%d\n",++j); printf("%d\n",j++); printf("%d\n",j++); printf("%d\n",++j); 试试,4457
随时随地看视频慕课网APP
我要回答