赋值操作在C中隐式计算为什么布尔值

What boolean value does an assignment operation implicitly evaluate to in C?

本文关键字:计算 为什么 布尔值 操作 赋值      更新时间:2023-10-16

我最近偶然发现了以下代码:

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循环将终止。

与第二个类似。