以下程序
main()
{int i=3,j=2,a,b,c;
a=(--i==j++)?--i:++j;
b=i++;
c=j;
printf("%d,%d,%d\n",a,b,c);
}
输出结果是 ( )
A.2,1,3 B.1,1,3
C.1,1,2 D.4,2,4
这道题我认为应该选A,可答案却是B。请问这是为什么?
以下程序
main()
{int i=3,j=2,a,b,c;
a=(--i==j++)?--i:++j;
b=i++;
c=j;
printf("%d,%d,%d\n",a,b,c);
}
输出结果是 ( )
A.2,1,3 B.1,1,3
C.1,1,2 D.4,2,4
这道题我认为应该选A,可答案却是B。请问这是为什么?
i=3;j=2;
a=(--i==j++)?--i:++j;
首先执行(--i==j++) ; 明显--i先减再引用 ,即执行的是 i = i-1; a = i;即a为 2; j++先是先引用再加, 引用的值是=还是2;
此时因为2==2,所以 (--i==j++) 成立, 所以接下来的便是 a = --i;
这句是先减再引用,即执行的是 i = i-1; a = i; 执行后a = 1;
故选B。
首先--i中--前置运算符,所以要先算出值为2,j++中++是后置运算符,先不计算而是比较,于是先执行==,发现?运算符前的值为真,得出a=--i,--是前置运算符,于是在赋值之前必须再减1。所以a最后值为1了。