C++程序中的错误概念

osi*_*the -5 c++ arrays

我有以下程序:

    #include<stdio.h>
int main()
{
    int a[5]={5,1,15,20,25};
    int i,j,m;
    i=(++a[1]);
    j=a[1]++;
    m=a[i++];
    printf(" The value of i is %d\n",i);
    printf(" The value of j is %d\n",j);
    printf(" The value of m is %d\n",m);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的概念,i,j和k的值应分别为2,2和15.但编译器分别显示i,j的值和3,2,15?为什么?你能解释一下这个输出背后的逻辑吗?

NPE*_*NPE 9

让我们关注i整个程序中发生的事情:

int a[5]={5,1,15,20,25};
i=(++a[1]); // i is now 2 (a[1]+1)
m=a[i++];   // after this, i=3
Run Code Online (Sandbox Code Playgroud)