++ * var ++和++ Var ++有什么区别?

时间:2018-06-28 14:50:06

标签: c post-increment pre-increment

++ * var ++和++ var ++有什么区别? 为什么++ * var ++可以工作,而++ var ++结果却在C中带有左值必需错误?

2 个答案:

答案 0 :(得分:5)

++var++被分组为++(var++),由于var++不是lvalue,因此导致编译失败。 (非正式地说,这意味着您不能将其放在作业的左侧)。

++*var++被分组为++(*(var++)),这意味着使用指针算法将指针var递增1,然后将var的初始值的取消引用值增加1。

答案 1 :(得分:5)

即使我只是在评论中建议这样做,但查看所有可能性可能还是有用的。对于指针变量p,我们有:

  1. ++p递增p,产生新价值
  2. p++递增p,产生旧值
  3. *++p递增p,访问它新指向的内容
  4. *p++递增p,访问它以前指向的内容
  5. ++*p递增p指向的内容,产生新的价值
  6. (*p)++递增p指向的内容,产生旧值
  7. ++*++p递增p,递增其新指向的值,产生新值
  8. (*++p)++递增p,递增其新指向的值,产生旧值
  9. ++(*p++)递增p,递增其指向的位置,产生新值
  10. (*p++)++递增p,递增其指向的位置,产生旧值
  11. ++p++无意义

案例9和11是您所要问的。在第9种情况下,我添加了显式括号,以使情况更加清楚。我猜想,如果您把它们留在外面并说++*p++也是可行的,但这会使我发疯,所以我不想再考虑了。