我对此指针值赋值有疑问:
*p++ = *q++;
运营商的优先事项是" ++" > " *" > " ="
但是上述陈述的结果是分配" ="首先,如下所示
*p = *q;
p++;
q++;
为什么?
答案 0 :(得分:3)
后增量运算符在其值已经计算之后递增其操作数。因此,指针取消引用发生在该行之前指针所持有的值上。但是,你给出的优先顺序是正确的;表达式确实等同于
(*(p++)) = (*(q++))
答案 1 :(得分:2)
因为它们是后缀运算符,而不是前缀!
答案 2 :(得分:0)
你错过了一个重要的区别。运营商有一个价值,和
它可能有副作用。对于postfix ++
,值为
在增量之前的值,副作用是
增量。表达式中使用的是值。旁边
效果可能在完整表达结束之前的任何时间发生(in
前C ++ 11术语,但实际效果没有改变);编译器可能
首先递增两个指针,保存它们之前的值
在表达式的其余部分中注册并使用它们,或者使用
值直接来自内存,并推迟两者的增量
指针直到表达式结束。或任何组合
导致相同可观察行为的操作。