有人可以解释这段代码的输出吗?

问题描述:

答案是90.但是,这是什么逻辑? 万一我写这个j =(4,5); 然后答案是5.有人可以解释这段代码的输出吗?

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

你认为它是什么?你为什么写这个代码?你想达到什么目的? – Lundin 2013-02-13 10:52:38

+0

请阅读以下内容:[逗号运算符](http://en.wikipedia.org/wiki/Comma_o​​perator) – Alex 2013-02-13 10:05:20

您正在使用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),但做晦涩的事情很少是赢。

+0

逗号用作分隔符而不是运算符。因为它的优先级低于赋值。 – 2013-02-13 10:07:10

+0

我无法清楚地明白你给了什么解释“放松”。你能否以更简单的方式解释它? – 2013-02-13 10:16:02

+0

@Juna我增加了更多的话,希望现在更清楚。 – unwind 2013-02-13 10:40:51