2

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

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

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

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

4

3 回答 3

14

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

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

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

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

于 2012-08-24T19:02:50.420 回答
2

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

赋值操作对被赋值的变量求值(左侧):

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

现在,当用作条件时,整数值在非零时计算为真,如果为零,则计算为

于 2012-08-24T19:06:39.387 回答
0

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

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

与第二个类似。

于 2012-08-24T19:04:26.143 回答