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.