我最近偶然发现了这段代码:
void strcat( char* dest, char* src )
{
while (*dest) dest++;
while (*dest++ = *src++);
}
看起来*dest++ = *src++
操作被用作while循环的条件。如何将此赋值操作转换为布尔值?我很难理解它。
此外,C ++中的语法是否相同?
答案 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循环将终止。
与第二种类似。