【问题标题】:Arrays and Increment Operators in C?C中的数组和增量运算符?
【发布时间】:2015-08-10 22:23:46
【问题描述】:

这是我从某人那里得到的示例代码,它会运行并给出答案

3、2、15

有人能解释一下这段代码是如何工作的,以及它是如何得到这些输出的吗?

代码:

int a[5] = { 5, 1, 15, 20, 25 };
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
_getch();

【问题讨论】:

  • 获取什么输出?你期望的输出是什么?
  • 另外,this operator precedence table 可能会帮助您稍微了解一下。
  • @JoachimPileborg,他的输出在帖子3, 2, 15 的第二行。他不期望输出,他想了解它的来源。
  • @user1717828 编辑前的原始帖子中的输出并不清楚,我确信 OP 期望 something

标签: c post-increment pre-increment


【解决方案1】:

您应该了解前增量 (++var) 和后增量 (var++)。

让我们逐行分解代码,好吗?

  1. i = ++a[1]; 这里,a[1]1,(数组 a 的第二个元素)预递增到 2,并且该值存储到 i

  2. j = a[1]++; 同样,2 存储到 j 中,然后 a[1] 后递增到值 3

  3. m = a[i++];a[2],即15存储到mi后递增到3

  4. printf("%d, %d, %d", i, j, m); -- 惊喜!!

【讨论】:

    【解决方案2】:
    1. a[1] 指的是第二个元素 1
    2. 在步骤i=++a[1],a[1]递增到2并赋值给i
    3. 在下一步中a[1] 再次递增,a[1] 的值再次递增到3
    4. 在第三步,m=a[i++]i 的值是第一步的2,但它是一个后增量。所以,m 将保持m=a[2]

    【讨论】:

      【解决方案3】:

      确实如此:

      • **Pre- **递增:递增变量中的值,然后使用递增后的值。

      • ** Post- ** 增量:获取值并使用它。 获取尚未增加的值后,增加存储在变量中的值。继续使用之前的值。

      “运算符优先级”规则的意思是,例如++a[1]表示先解析a[1]的含义,然后将++运算符应用到那个内存——地点。第一个元素(实际上是second元素...)的值会递增,递增后的值会返回给语句使用。

      【讨论】:

        猜你喜欢
        • 2013-10-08
        • 2015-09-25
        • 2012-10-17
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多