-5

我有以下程序:

    #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;
}

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

4

3 回答 3

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
于 2013-07-05T06:27:03.303 回答
3

这里似乎没有什么问题:

#include<stdio.h>
int main()
{
    int a[5]={5,1,15,20,25};
    int i,j,m;
    i=(++a[1]); //i=2; a[1] = 2; i.e first increment a[1] then equate i to a[1]
    j=a[1]++; //j = 2; a[1] = 3; i.e first equate j to a[1] then increment a[1]
    m=a[i++]; //m = a[2]=15; i=3; i.e. first equate m to a[i] then increment 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;
}
于 2013-07-05T06:28:34.633 回答
0

在语句中i=(++a[1]);,首先 a[1] 的值增加 1。然后它被分配给 i,现在 i 是 2。看你做分配m=a[i++]。这里有优先级。首先 a[i],i 是2分配给m,然后在这个语句中i的值增加。现在i是3。所以首先是赋值,然后是增量。如果语句是,则不是这种情况m=a[++i]。在这个语句中,i首先增加然后做作业

于 2013-07-05T06:30:26.460 回答