赋值操作在C中隐式计算为什么布尔值
What boolean value does an assignment operation implicitly evaluate to in C?
我最近偶然发现了以下代码:
void strcat( char* dest, char* src )
{
while (*dest) dest++;
while (*dest++ = *src++);
}
其中看起来*dest++ = *src++
操作被用作while循环的条件。如何将此赋值操作转换为布尔值?我很难理解它。
此外,同样的语法在C++中有效吗?
在C中,逻辑语句中的非零值算作true,零算作false。
任何赋值语句的结果都是赋值后左操作数的值。
因此,在第二个循环中,如果指定的值是0
,则条件的结果为false。在第一个循环中,如果指向变量本身的值为0
,则条件为false。
这种语法在C++中也是有效的。
在C中,赋值操作隐式计算为哪个布尔值?
赋值操作评估被赋值的变量(左侧):
int i = 0;
int j = (i = i+5); // j == 5 | (i = i+5) assigns 5, then evaluates to i
现在,当用作条件时,当整数值为非零时,其计算结果为true;如果为零,其计算值为false。
计算结果为0的表达式为false。计算结果为非零的表达式为true。
当*dest等于0时,第一个while循环将终止。
与第二个类似。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 我的字符计数代码计算错误.为什么
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 为什么 Lisp 中 1000 阶乘的计算如此之快(并显示正确的结果)?
- 为什么 2 个双精度值之间的差值计算错误?
- 为什么以下不等式在C++计算为真?
- 为什么 STL 函数使用节点的颜色来计算 std::map 节点前身
- 为什么程序没有正确计算值
- 当 NUL 字符被定义为字符串的一部分时,为什么 strlen() 不计算终止 NUL 字符的字节?
- 为什么 02000 的计算结果为 1024
- 为什么将三个变量与 == 一起比较会计算为 false?
- 为什么这两个相似的代码计算行列式的结果不同?
- 为什么 g++ 将计算拉入热循环
- 为什么按位运算符在使用与整数中提供的位数相同的位数计算可能的最大范围时会产生错误
- 赋值操作在C中隐式计算为什么布尔值
- 长数据类型计算-为什么Java比c++快得多