【问题标题】:Understanding post and pre increment with comma in between [duplicate]用逗号理解前后增量[重复]
【发布时间】:2018-12-25 11:44:03
【问题描述】:

考虑下面的程序

#include <stdio.h>
void main(){
    int p = -8;
    int i = (p++, ++p);
    printf("%d\n", i);
}

我无法理解为什么输出是 -6。

p++ 将在赋值语句执行后递增,++p 将在从 -8 变为 -7 之前递增。

i 是如何分配到 -6 的?

【问题讨论】:

标签: c


【解决方案1】:

因为对于逗号运算符A,B,先完成A,然后再完成Bp++ 递增p++p 也递增pOperator precedence.

或者这样想

int i = (p++, ++p);

p++;
int i = ++p;

【讨论】:

  • 那么,就是说就算是p++,也执行了,值也变了?
  • @user3767495 这样想:毕竟,当p++ 完成后,p 会增加。
【解决方案2】:

表达式(p++, ++p) 有一个comma operator。逗号运算符从左到右计算其操作数并产生最右边操作数的结果。因此i 得到值-6(在p++++p 操作之后)。

【讨论】:

    【解决方案3】:

    正如 ptr_user7813604 所说,您正在使用逗号运算符,它是 c 中的二元运算符。 它评估它的第一个操作数(在你的情况下 p++ 递增 p)然后丢弃结果(意味着 p 被递增但没有分配给任何变量)然后它评估第二个操作数(在你的情况下 ++p 递增 p)并返回这个值和类型。因为第二个操作数是 ++p ,所以你会在它增加后收到值,如果第二个操作数是另一个 p++ 你会在它增加之前分配给 i 值。

    有关逗号运算符的更多信息,您可以查找https://en.wikipedia.org/wiki/Comma_operator

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 2020-04-13
      • 2012-10-03
      • 2016-07-08
      • 2016-02-02
      • 1970-01-01
      • 2022-01-04
      • 2013-08-26
      相关资源
      最近更新 更多