2

最近、このコードに出くわしました:

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

*dest++ = *src++操作が while ループの条件として使用されているように見える場所。この代入演算はどのようにブール値に変換されますか? 私はそれを理解するのに苦労しています。

さらに、同じ構文は C++ でも有効ですか?

4

3 に答える 3

14

C では、論理ステートメント内のゼロ以外の値はtrueとしてカウントされ、ゼロはfalseとしてカウントされます。

また、代入ステートメントの結果は、代入後の左オペランドの値です。

したがって、2 番目のループで、割り当てられた値が である場合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 に答える