IF语句中的C赋值

时间:2016-09-02 10:12:02

标签: c

很抱歉,如果这是一个愚蠢的问题,但我遇到了用C语言编写的这行代码,这让我很困惑来自JavaScript背景。

short s;
if ((s = data[q])) return s;

这是为数据[q]分配s,如果它等于true / 1则返回s?

3 个答案:

答案 0 :(得分:5)

是的,作业......很好......但它也是一种表达方式。任何不等于零的值都将被评估为真,零将被评估为假。

它与

相同
if ((s = data[q]) != 0) return s;

答案 1 :(得分:3)

您的代码正在将data[q]分配给s,然后将s返回到if语句。在s不等于0的情况下,您的代码会返回s,否则会转到下一条指令。

或者更好地说它会扩展到以下内容:

short s;
s = data[q];
if (s != 0)
    return s; 

答案 2 :(得分:2)

基本上C评估表达式。在

s = data[q]

data[q]的值是此处表达式的值,并根据该值评估条件。

作业

s <- data[q]

只是side-effect

关于序列点和副作用

阅读此[ article ]