【问题标题】:Why does this program run the way it does?为什么这个程序会这样运行?
【发布时间】:2015-02-18 05:59:13
【问题描述】:
#include<stdio.h>
int main()
{
    int a[5] = {5, 1, 15, 20, 25};
    int x, y, z;
    x = ++a[1];
    y = a[1]++;
    z = a[x++];
    printf("%d, %d, %d", x, y, z);
    return 0;
 }

"x" 打印为 3,但我希望它返回 2?事实上,如果我删除“++”并设置 x 等于 a[1],它会返回 2。它会将 1 加到实际存在的任何值上。我错过了什么吗?

【问题讨论】:

  • 阅读一本关于 C 编程的好书。关注sequence points
  • @BasileStarynkevitch:与序列点没有任何关系:这里的所有内容都已正确排序。

标签: c arrays addition


【解决方案1】:

"x" 打印为 3,但我希望它返回 2?

 x = ++a[1]; 

这里 x = 2 因为预增量

你有的

z = a[x++];

x ++ = x + 1 = 2+1 = 3

因此x=3

【讨论】:

    【解决方案2】:
    x = ++a[1];//Increment a[1] and then assign it to x
    y = a[1]++;//assign a[1] to y and then increment a[1]
    z = a[x++];//assign a[2] to z and then increment x
    

    【讨论】:

      【解决方案3】:

      ++ 称为增量运算符。它将值增加 1。 在你的代码中,你有

      x = ++a[1];
      

      ++ 在变量之前是预增量运算符。它在将a[1] 的值分配给x 之前递增它的值。所以a[1]x的值变成了3。

      另一个

      y = a[1]++;
      

      ++ 变量后面是后自增运算符。它将a[1](已经变成3)分配给y,然后将a[1]的值增加到4。

      这个链接会帮助你

      http://www.c4learn.com/c-programming/c-increment-operator/#A_Pre_Increment_Operator

      【讨论】:

        【解决方案4】:
        x=++a[1]; //  Now x got the value 2. 
        

        在这一行,

        z = a[x++]; // x++ will be happen after the assigning of a[2] to z. So the value of x is incremented. So the x value is became 3. 
        

        这是后增量,因此 z 的值为 15。请参阅此 link

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-20
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          • 1970-01-01
          • 2019-02-08
          • 2017-03-06
          相关资源
          最近更新 更多