指针指向的int的增量值


73

我有一个int指针(即int *count),我想通过使用++运算符来增加所指向的整数。我以为我会打电话给:

但是,我得到了一个构建警告“表达式结果未使用”。我可以打电话

但是,我也想知道如何使用++运算符。有任何想法吗?

Answers:


97

++的优先级与*相同,并且关联性是从右到左。看这里 它变得更加复杂,因为即使++将与指针关联,增量也会在语句的求值后应用。

发生的顺序是:

  1. 发布增量后,请记住将增量后的指针地址值作为临时值
  2. 取消引用非递增指针地址
  3. 应用递增的指针地址进行计数,计数现在指向该类型实体的下一个可能的内存地址。

之所以收到警告,是因为您实际上从未在第2步中实际使用过取消引用的值。就像@Sidarth所说的那样,您需要括号来强制求值顺序:


10
我要补充一点,我总是这样写,++*ptr;因为优先顺序是明确的,并且如果不使用结果,则无需区分预增量和后增量。
RBerteig

4
@RBerteig:它对于编译器可能是明确的,但仍然会使人感到困惑。使用括号会更好,因为这会使阅读起来更容易。
马丁·约克

1
@Martin,过度使用括号可能会使人感到困惑。像我写的那样,只有一个合理的操作顺序,并且与“ increment”,“ pointed by”,“ p”的自然读法相匹配。
RBerteig 2010年

2
我这样做了,已经有25年了。还没有巴掌。
RBerteig

11
@RBerteig:半个世纪的Lisp与您不同意。;)
Deniz Dogan 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.