C指针的增量

3
我正在使用C指针,如果我使用 *p++ 递增指针,它会递增p,但仅返回在递增之前指针p所指向的值。如何递增指针p所指向的值?

这实际上是一个纯C问题,因此我已经添加了标签。 - JeremyP
2个回答

6

做这个:(*p)++

使用括号,您表示您要增加指向的值。


如果您不需要该值并且想要练习不必要的括号,则 ++*p 也可以工作。 - David X
+1. 我不明白为什么其他答案会被投票或者至少没有被投票否决。Ian的回答是唯一正确的。问题的提问者希望增加p所指向的值,而不是p的值。 - Stephen
@Stephen 这个问题有点含糊不清,“它增加了p”的听起来像他真的试图增加指针。重新阅读后,我认为这是正确的答案。 - cobbal
@Stephen:有时回答者和点赞者看到像OP这样的问题,会想“哦,又来了:他有*p++,现在想要反向递增”。我因为一个与OP问题无关的答案得到了+3分,所以我认为这种情况很容易发生。 - Nordic Mainframe
@cobbal:一点都不含糊。“它会递增p”描述的是他当前所看到的行为。“如何递增指向p的值”则描述了他想获得的行为。 - JeremyP
事实上,C语言的优先级规则经常是错误的源头。为了澄清你的意图,加上一些额外的括号是好的习惯,即使它们看起来多余,也应该保留它们,因为冗余比错误更好。 - Ian

4
postfix ++的优先级比*高,编译器会将*p++读作*(p++)。如果你要增加*p的值,需要加上括号:(*p)++会返回*p的值,并将p的值加一。++(*p)会将*p的值加一并返回这个值。

在最后一种情况下可以省略括号并写成++*p,但我建议不要这样做,因为++(*p)(*p)++的对应形式,但对于++*p,它不是*p++


这个问题怎么会被点赞了呢?问题是要求如何递增指向p的值,而不是如何递增p并获取新p所指向的值。 - JeremyP
Neeraj问:“我该如何递增指向p的值。” 这将递增指针p,然后对其进行解引用以获取p现在指向的值。 - Stephen
哎呀,这是我的误读...我想我的点赞者也犯了同样的错误 :-). 我正在修复这个问题。 - Nordic Mainframe
谢谢你建议我使用 (*P)++ 的解决方案,它起作用了。 - Neeraj87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接