X=5
Y=X+1=6
Z=Y*X/2=15
a=Y=6
printf("%d\n",Z); =>输出15
printf("%d\n",--a); =》 --a为表达式是取a-1的值 所以输出为5
Z的值为7
Z <==>Y*X/2 <==>X+1*X/2 <==>5+1*5/2 = 7 这里考你宏定义的规范性,像Y这种宏定义就不够规范,容易引起歧义.
a的值为4
这里是因为先进性了--的操作,然后再赋值给前面! 这里就就是考一个 先-- 和后--的问题
X=5
Y=X+1=6
Z=Y*X/2=15
a=Y=6;
--a=5
printf("%d\n",Z);输出15
printf("%d\n",--a);输出5
a=Y=X+1=5+1=6。
Z= Y*X/2 = X+1*X/2 = 5+1*5/2 = 5+2 = 7 (注意:#define 只定义常量的表达形式,并不指明其具体的值,所以会出现 Z = 7 的情况)。
--a:先将a的值减1(a = a - 1 = 6 - 1 = 5 ),再对其进行操作。
因此,
printf("%d\n",Z); //输出7
printf("%d\n",--a); //输出5
你可以运行一下,看看具体结果。