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.
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |