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

what is the difference between ++*var++ and ++Var++?

++*var++ 和 ++var++ 有什么区别? 为什么 ++*var++ 工作而 ++var++ 结果在 C 中出现左值必需错误?

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

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

尽管我只是在评论中建议不要这样做,但查看所有可能性可能会有用。对于指针变量 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++ 也可以,但这让我的头爆炸了,所以我不想再考虑了。