看看这个循环将一个c-string复制到另一个c-string:
void strcpyr(char *s, char *t)
{
while(*s++=*t++)// Why does this work?
;
}
Run Code Online (Sandbox Code Playgroud)
为什么我们不在while循环中检查'\ 0'字符,像这样?
while((*s++=*r++)!='\0')..
Run Code Online (Sandbox Code Playgroud)
第一个循环是如何终止的?
Fer*_*cio 12
语句*s ++ =*t ++不仅将下一个字符从t分配给s,还返回当前值*t作为表达式的结果.while循环终止于任何false值,包括'\ 0'.
这样想吧.如果你这样做:
char c = *s++ = *t++;
Run Code Online (Sandbox Code Playgroud)
除了将char从*t复制到*s并递增两者之外,它还将c设置为当前值*t.