任何人都可以解释这段代码的输出吗?

时间:2013-02-13 10:03:24

标签: c

答案是90.但这是什么逻辑? 如果我写这个j =(4,5); 然后回答是5.

    #include<stdio.h>
    void main()
    {
        int j;
        j=(4,5,90);
        printf("%d\n",j);
    }

1 个答案:

答案 0 :(得分:8)

您正在使用comma operator

  

在C和C ++编程语言中,逗号运算符(由标记表示)是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型)。

请注意,这与分隔函数参数的逗号不同。

a = 1, 2, 3;
     ^  ^
     |  |
  comma operators

a = foo(1, 2, 3);
         ^  ^
         |  |
      separators

对于您的代码,这意味着所有发生的事情都是逐个评估表达式4590,结果是最后一个结果表达,即90

括号只是括号,它们不会以任何方式影响结果。

const int j = (4, 5, 90);

与:

相同
const int j = 4, 5, 90;

或者,就此而言:

const int j = (4), (5), (90);

正如我在上面链接的维基百科页面上所指出的那样,从上面可以看出,逗号运算符很少有用。它可以被欺骗用于各种不明显的目的(参见this page for examples),但做一些模糊的事情很少是一场胜利。