指针指向的int的增量值

joe*_*els 67 c pointers increment post-increment

我有一个int指针(int*count),如果我想增加使用++指向的整数,我以为我会调用

*count++;
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个构建警告"表达结果未使用".我可以打电话

*count += 1;
Run Code Online (Sandbox Code Playgroud)

但是,我想知道如何使用++.有任何想法吗?

Dou*_* T. 89

++与*具有相同的优先级,而关联性从右到左.看到这里.它变得更加复杂,因为即使++将与指针相关联,也会在语句评估之后应用增量.

事情的顺序是:

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

您收到警告是因为您从未在步骤2中实际使用过去引用的值.就像@Sidarth所说,您需要使用括号来强制执行评估顺序:

 (*ptr)++
Run Code Online (Sandbox Code Playgroud)

  • @RBerteig:半个世纪的Lisp不同意你的看法.;) (11认同)
  • 我补充一点,我总是将这个案例写成`++*ptr;`因为优先级是明确的,如果没有使用结果,则无需区分preincrement和postincrement. (9认同)
  • @RBerteig:编译器可能是明确的,但它仍然让人困惑.使用括号要好得多,因为这样可以更容易阅读. (4认同)
  • @RBerteig:如果您声称 `++*ptr` 比 `++(*ptr)` 更容易阅读,那么我希望您在下一次代码审查中被打倒。 (2认同)
  • 我这么说,并且有大约25年.还没打耳光. (2认同)

Sid*_*war 14

尝试使用(*count)++.*count++可能是将指针递增到下一个位置然后使用间接(这是无意的).