c - if 语句中的赋值语句如何充当条件?

标签 c if-statement boolean assignment-operator

if ((vnd = (struct diam_vnd_t *)g_hash_table_lookup(vendors,vend))) {...}

你能告诉我为什么它是赋值而不是括号中的 boolean 表达式吗?在什么情况下这个赋值可以被认为是“真”或“假”?

最佳答案

引用 C11,第 6.5.16 章,赋值运算符(强调我的)

An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment,111) but is not an lvalue.

因此,首先会发生赋值,然后,已赋值的值将用作if中的条件语句。

所以,如果是

if (p = 0 )

将评估为 FALSE 并且

if (p = 5)

将为真。

关于c - if 语句中的赋值语句如何充当条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37166250/

相关文章:

r - 如果一行中的任何列满足条件而不是 mutate() 列

javascript - 将 boolean 值传递给 jQuery 插件的最简单的方法是什么?

data-binding - Knockout.js 单选按钮的 boolean 数据绑定(bind)问题

c - 按照 Beej 的网络编程指南实现聊天客户端

c - 为什么按位与 0xffff 在 (uint32_t)(((f - (int)f) * 65536.0f))&0xffff 中实现?

python - q, w = 1, 2 如果 1 < 2 否则 2, 1; ValueError : too many values to unpack. 为什么?

java - 一行状态检查中的三个状态? (关于Java语法)

javascript - every() 方法没有返回正确的值

c - 如何更改用户密码?

c - `void *` 函数参数类型不一致的转换方法