C 这个输出背后的过程是什么?

C 这个输出背后的过程是什么?,c,C,当我注释掉语句2和3时,i的值是2,但当我不注释时,i变为3。为什么呢 #include <stdio.h> int main() { int a[5]={5,1,15,20,25}; int i,j,k=1,m; i=++a[1]; //Statement 1 j=a[1]++; //Statement 2 m=a[i++]; //Statement 3 printf("%d %d %d",i,j,m); re

当我注释掉语句2和3时,i的值是2,但当我不注释时,i变为3。为什么呢

#include <stdio.h>
int main()
{
  int a[5]={5,1,15,20,25};
  int i,j,k=1,m;
  i=++a[1];   //Statement 1               
  j=a[1]++;   //Statement 2
  m=a[i++];   //Statement 3

  printf("%d %d %d",i,j,m);
  return 0;
}

m=a[i++]使i增加1。正是i++部分增加了i。

在语句3中,您的代码增加了i的值:

更容易注意的是,将其分解为以下两行:

m = a[i];
i++;
注意:订单很重要!由于这是增量后的i++,而不是++i,因此首先使用i的值,然后再递增。

在语句1:i=a[1]+1之后,这意味着要将1添加到[1],然后将该值存储在i中

i = 2 ; a[1] = 2'
在语句2之后:j=a[1]++,这意味着你在[1]上加1,即2+1

在语句3之后:m=a[i+1],这意味着您正在向索引值添加1 我已经等于2,所以你做m=a[2+1],它是15,但是因为你有i++这个运算,仍然会执行加法,使i=4


因为对于语句2+3,它是不同的代码?你不明白什么?因为陈述3增加了i。试着解释为什么你期望你期望的,不要忘记接受其中一个答案。我想我知道了,但是m的输出应该是20,对了,但是输出显示为15,或者它是在以后增加的,请解释这个过程?是的,它是在以后增加的。i++使用i,然后递增++i递增,然后使用i。明白了,我学到的教训是,我先被使用,然后递增。在j=a[1]++中,a[1]是先赋值,然后递增,还是先递增,然后赋值j=a[1]++;与j=a[1]相同;,后跟[1]+;。
i = 2 ; a[1] = 2'
j = 2; a[1] = 3;
m = 15; i = 4; thus a[i] = 20