有人可以向我解释这个简单代码段的输出吗?
int i=7;
int j=3*i-- + 2;
printf("%d %d",i,j)
当我编译时,我得到6,23
。
23岁怎么样?我以为它会是3 * 7 = 21减少到20而增加2是22而不是23?
答案 0 :(得分:3)
int i = 7; /* i is 7 */
int j = (3 * (i--)) /* means 3 * 7 */ + 2; /* 3 * 7 + 2 = 23 */
/* i is now 6, because it was decreased by the postfix -- operator */
printf("%d %d", i /* 6 */, j /* 23 */);
答案 1 :(得分:2)
i--
确实会产生将i
递减1(将其设置为6)的副作用,但该表达式会产生之前的值i
。 --i
会减少i
并产生新的结果。
答案 2 :(得分:1)
--
绑定到i
,而不是3*i
。 (由于(3*i)--
不是3*i
所要求的左值,因此您无法--
。)i--
的值是i
的原始值在减少之前。
答案 3 :(得分:1)
C中的一元运算符列表:http://en.wikipedia.org/wiki/Unary_operation#C_family_of_languages
--
是一元运算符并绑定到i
,因此它是i--
,而不是(3 * i)--
。
由于它是递减后的,因此使用了i
BEFORE递减的值,所以你的等式只是:
3 * 7 + 2
,i
将为6。