【问题标题】:increment value of int being pointed to by pointer指针指向的 int 的增量值
【发布时间】:2011-04-09 00:23:41
【问题描述】:

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

*count++;

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

*count += 1;

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

【问题讨论】:

    标签: c pointers increment post-increment


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      ++ 与 * 具有相同的优先级,并且关联性是从右到左。请参阅here. 它变得更加复杂,因为即使 ++ 将与 指针 相关联,也会在语句评估后应用增量。

      事情发生的顺序是:

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

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

       (*ptr)++
      

      【讨论】:

      • 我要补充一点,我总是将这种情况写成++*ptr;,因为优先级是明确的,如果不使用结果,则无需区分前置增量和后置增量。
      • @RBerteig:这对编译器来说可能是明确的,但对人类来说仍然令人困惑。使用括号会更好,因为这样更容易阅读。
      • @Martin,过度使用括号可能会让人感到困惑。当像我这样写时,只有一种合理的操作顺序,并且与“增量”、“指向的东西”、“p”的自然读法相匹配。
      • 我确实声称,并且已经使用了大约 25 年。还没有打耳光。
      • @RBerteig:半个世纪的 Lisp 不同意你的看法。 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2011-08-04
      • 2018-08-19
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      相关资源
      最近更新 更多