我最近偶然发现了这段代码:
void strcat( char* dest, char* src )
{
while (*dest) dest++;
while (*dest++ = *src++);
}
看起来该*dest++ = *src++
操作被用作 while 循环的条件。这个赋值操作如何转换为布尔值?我很难理解它。
此外,相同的语法在 C++ 中是否有效?
我最近偶然发现了这段代码:
void strcat( char* dest, char* src )
{
while (*dest) dest++;
while (*dest++ = *src++);
}
看起来该*dest++ = *src++
操作被用作 while 循环的条件。这个赋值操作如何转换为布尔值?我很难理解它。
此外,相同的语法在 C++ 中是否有效?
在 C 语言中,逻辑语句中的非零值计为真,零计为假。
而任何赋值语句的结果都是赋值后左操作数的值。
因此在第二个循环中,如果分配的值为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
现在,当用作条件时,整数值在非零时计算为真,如果为零,则计算为假。
计算结果为 0 的表达式为假。计算结果为非零的表达式为真。
当 *dest 等于 0 时,第一个 while 循环将终止。
与第二个类似。