如何在C中处理的小括号中传递参数?

时间:2014-03-10 17:57:29

标签: c

以下代码:

int main(void) {
    int x = 1000, y = 5000;
    printf ("%d\n", x, y);
    printf ("%d\n", (x, y));
    return 0;
}

输出: 1000 5000

有人可以解释一下吗?

5 个答案:

答案 0 :(得分:2)

关于operator precedence 在(x,y)的情况下,对()内部()的第一个语句进行求值,以便将最后一个值y作为()的结果。 without()所有逗号运算符都具有相同的优先级,因此从左到右进行求值,因此对printf()采用x值

答案 1 :(得分:2)

括号使(x, y)成为单个表达式,由xy组成comma operator。运算符评估x,抛出值,评估y,并使其成为表达式的值。

由于评估变量x没有副作用,因此在这种情况下,表达式(x, y)相当于自己传递的y

printf ("%d\n", y);

注意:如果您的第一个printf使用"%d %d"格式字符串,则会看到xy

答案 2 :(得分:1)

对于第一个printf,你只是传递一个被忽略的第二个参数。

对于第二个,您正在调用逗号运算符,该运算符计算它的两个参数,并返回第二个值。

答案 3 :(得分:1)

您在这里看到的是C逗号运算符的评估 http://en.wikipedia.org/wiki/Comma_operator

很少使用的逗号运算符通常在for()循环的第三部分中使用,以便在增量上执行多个操作,但从技术上讲,它在任何地方都是有效的表达式。

答案 4 :(得分:0)

在函数printf的第一次调用中,参数个数超过格式字符串中的格式说明符数

printf ("%d\n", x, y);

在这种情况下,y的第二个参数将被忽略。只有x才会被输出。所以调用的输出是

1000

在函数printf的第二次调用中,只有一个参数是括在括号中的表达式。

printf ("%d\n", (x, y));

此表达式是逗号运算符的表达式。首先评估x的第一个操作数。它的价值被忽略了。然后评估表达式y的第二个操作数。它的值用作完整表达的结果。所以这个函数调用输出

5000