はい、'\0'
ヌル文字は0
です。
条件式を理解するには、次の点を考慮してください。
1:結合代入演算子=
は右から左への代入であるため、式
a = b = c;
以下と同等です。
a = (b = c);
と同等の効果で:
b = c;
a = b;
2:ポインター代入式:
*s++ = *t++;
以下と同等です。
*s = *t;
t++;
s++;
3:と式:
con = *s++ = *t++;
以下と同等です。
*s = *t;
con = *s;
t++;
s++;
四:
(*s++ = *t++) != '\0'
以下と同等です。
*s = *t;
*s != '\0';
t++;
s++;
[回答] :
2 番目の while ループでは、次のようになります。
while (*s++ = *t++);
// ^ ^
// | |
// assign then increments
// then break condition = *s (updated value at *s that is \0 at the end)
命令は、アドレス byの値"*s++ = *t++
をアドレス by の値にコピーし、その値が while ループのブレーク条件になるため、ループは に等しい値が見つかるまで実行されます。t
s
\0
0
したがって、条件式は 両方の run until(*s++ = *t++)
と同等 です。(*s++ = *t++) != '\0'
*s != 0
最後に:
while (s[i] = t[i]) i++;
// ^ ^ ^
// | | increments
// assign then increments
// then break condition = s[i] (s[i] is \0 at the end)
命令s[i] = t[i]
は、最初に の値をコピーt[i]
してから、最後に (=0) である while ループのブレーク条件としてs[i]
の値を使用します。s[i]
\0