【发布时间】:2013-11-02 15:15:32
【问题描述】:
这是我的程序:
int main(void)
{
int i, j, k, m;
i=-3, j=2, k=0;
m = k++ && ++i && ++j;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
上面程序的输出是:
-3 2 1 0
但根据运算符优先级表,我猜 ++ 应该首先评估。 我也尝试在它们周围加上括号,但输出仍然保持不变。 我在某处读到,无论如何,加上括号会使其首先评估。
有人,请说清楚,它是如何评估的。 提前致谢。
【问题讨论】:
-
你想做什么?什么是'm'?
-
因为
k = 0所以表达式k++ && ++i && ++j;等价于0 && ++i && ++j;、k++;和0 && ++i && ++j;=False所以++j和k++不会被计算。 -
另见this。
-
优先级和括号都与评估顺序无关。评估顺序是通过排序来定义(定义时),这是一个完全不同的概念。排序(或没有排序)是运算符的固有属性,不能通过任何括号更改。
标签: c