赋值操作在C中隐式计算的是什么布尔值?

时间:2012-08-24 19:01:36

标签: c++ c conditional-statements

我最近偶然发现了这段代码:

void strcat( char* dest, char* src )
{
     while (*dest) dest++;
     while (*dest++ = *src++);
}

看起来*dest++ = *src++操作被用作while循环的条件。如何将此赋值操作转换为布尔值?我很难理解它。

此外,C ++中的语法是否相同?

3 个答案:

答案 0 :(得分:14)

在C中,逻辑语句中的非零值计为 true ,零为 false

任何赋值语句的结果都是赋值后左操作数的值。

因此在第二个循环中,如果指定的值为0,则条件的结果为 false 。在第一个循环中,如果指向变量本身的值为0,则条件为 false

此语法在C ++中也有效。

答案 1 :(得分:2)

  

赋值操作在C中隐式评估的是什么布尔值?

赋值操作计算为分配的变量(左侧):

int i = 0;
int j = (i = i+5); // j == 5 | (i = i+5) assigns 5, then evaluates to i

现在,当用作条件时,如果积分值为非零,则计算为 true ;如果为零,则为 false

答案 2 :(得分:0)

计算结果为0的表达式为false。 计算结果为非零的表达式为真。

当* dest等于0时,第一个while循环将终止。

与第二种类似。