在C中复制字符串

chr*_*yal 7 c string pointers pointer-arithmetic

我对此代码感到困惑:(http://www.joelonsoftware.com/articles/CollegeAdvice.html)

while (*s++ = *t++);
Run Code Online (Sandbox Code Playgroud)

执行的顺序是什么?是*s =*t首先完成,然后它们各自递增?或者其他方式?

谢谢.

编辑:如果是这样的话:

while(*(s++) = *(t++));
Run Code Online (Sandbox Code Playgroud)

while(++*s = ++*t);
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 14

while (*s++ = *t++);
Run Code Online (Sandbox Code Playgroud)

优先级表中可以清楚地看到++优先级高于*.但是++在这里用作后增量运算符,因此增量发生在赋值表达式之后.所以*s = *t首先发生,则s和t递增.

编辑:

while(*(s++) = *(t++));
Run Code Online (Sandbox Code Playgroud)

与上述相同.通过使用括号,您可以更明确地使用它.但记住++仍然是一个后期增量.

while(++*s = ++*t);
Run Code Online (Sandbox Code Playgroud)

s旁边只有一个运算符.所以*被首先应用该结果++应用导致的lvalue required错误.

while(*++s = *++t);
Run Code Online (Sandbox Code Playgroud)

再次只是s,t旁边的运算符.因此,首先进行增量,然后进行复制.所以我们有效地将第一个字符的副本从t跳到s.