获得意外的输出

时间:2015-01-16 14:46:49

标签: c arrays

任何人都可以帮我理解以下代码的输出是3 2 15吗?

我希望输出为:2 2 15,因为

  • 首先元素a[1]1将获得预先递增,i将被分配2
  • 然后j也将被分配2,因为后期增量已完成,
  • 当涉及m时,a[i++]应为a[2],即15,因为后期增量已完成,m应分配{{1} }}。

如果我错了,请帮助我。

15

6 个答案:

答案 0 :(得分:4)

int a[5]={5,1,15,20,25};

a[1]增加到2,并将i设置为

i=++a[1]; 

j设为a[1](2),然后a[1]增加为3

j=a[1]++;

m设置为a[i]a[2]或15),然后i增加为3

m=a[i++];

答案 1 :(得分:1)

    i=++a[1]; /* a[1] = 1 and you have a pre-increment so */

    i = 2;

    j = a[1]++; /* a[1] = 2  and post-increment so j = 2 */

    j= 2

    m=a[i++]; /* m = a[2] = 15 and `i` is incremented later i = 3 */

    m = 15

    i = 3

So i=3 j = 2 and m = 15

答案 2 :(得分:0)

  • a [1]增加到2;我被分配了这个值
  • a [1](仍为2)的值也被赋值给j,之后[1]增加到3
  • a [2](15)被赋予m;然后我增加到3

答案 3 :(得分:0)

a[1]=1;
i=++a[1]; //a[1] is pre-incremented by 1 so i=2;
j=a[1]++; // a[1] is post incremented by 1 so j=2;
m=a[i++]; // i is post incremented by 1  so m =a[2] so m=15
          // as i was post incremented so i=2+1 in next step.

答案 4 :(得分:0)

i=++a[1]; ==> ++a[1] == 2 

i获取数组a[1]的预增量值,即2

j=a[1]++; ==> a[1]++ == 2

同样,j变为2,但后期会增加。

m=a[i++]; ==> a[3] == 15 /* Here i became 3*/

此处i已经2增加1成为3,后者在下一个语句中递增,结果m被赋予a[2] 1}}这是15

答案 5 :(得分:0)

你阵列的第二个人是1。 所以做i = ++ a [1];转换为i = ++ 1;。 这是2。 J是同样的事情(在这种情况下)。 然后你用“i”取两个数组的第二个值(15),然后你将一个加到“i”。 导致i = 3,j = 2且m = 15.

注意:i = ++ 1;只是为了想象正在发生的事情,这不应该也不能使用。