IF语句中的C赋值

coc*_*ave 0 c

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

short s;
if ((s = data[q])) return s;
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*ski 7

您的代码将分配data[q]给该语句s,然后返回sif语句。如果s不等于0您的代码,则返回s,否则它将转到下一条指令。

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

short s;
s = data[q];
if (s != 0)
    return s; 
Run Code Online (Sandbox Code Playgroud)


Ser*_*sen 5

是的,一项任务......很好地分配......但它也是一种表达方式.任何不等于零的值将被评估为真,零被评估为假.

它会是一样的

if ((s = data[q]) != 0) return s;
Run Code Online (Sandbox Code Playgroud)

  • “评估为 1”确实令人困惑,它更像是“任何非零值都将被视为 true”。 (2认同)