【问题标题】:How should I mentally parse this statement?我应该如何在精神上解析这个陈述?
【发布时间】:2017-03-08 16:13:03
【问题描述】:

我遇到了下面的说法,脑洞大开。

++(*q)->len;

q 似乎是一个连续的内存数组,从外观上看, 似乎是指向structs 的指针数组;掌握一个新的 代码库,抱歉含糊不清。

有了上面的陈述,我们 取消引用q,获取作为指针的值,然后我们取消引用并访问字段len,然后我们递增?在代码中,我想说的是这个++((*q)->len),将是显式执行。

或者我应该将其阅读为,我们取消引用q,然后增加值,然后我们取消引用并获取structlen 字段,该字段在递增之前比q 早一个.同样,在代码中,我想说的是这个(++(*q))->len,将是显式执行。

任何指导都是伟大的

更新: 我猜第一个解析是有意义的++((*q)->len),就好像它是第二种情况一样, 我们会得到len 的值,然后什么也不做。

【问题讨论】:

  • ++((*q)->len));
  • 查看维基页面operator precedence
  • 大声笑,请参阅更新。我终于到了那里……这是漫长的一天。
  • 阅读How to Ask,提供minimal reproducible example,并去掉无关语言的标签。 C 和 C++ 是不同的语言。
  • C 优先顺序会让你/代码出错。建议按照@RyanMcCullagh 的建议添加另一组括号

标签: c pointers dereference


【解决方案1】:

*q 并不真正意味着它是连续的内存数组。 答案是它在内存位置q 处增加结构对象的len 字段

【讨论】:

  • 他并没有根据该语句推断它是一个连续的数组,不过——这是他从他发现该语句的上下文中收集到的。
  • 我知道,我告诉你q 指向内存中的一个连续数组。
  • @izaak_pyzaak 与其用“似乎是”来描述q,帖子可以更好地展示q 的代码,就像它的声明一样。
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
相关资源
最近更新 更多