C ++程序中的错误概念

时间:2013-07-05 06:25:00

标签: 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;
}

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

在语句i=(++a[1]);中,首先将[1]的值增加1.然后将其分配给i,到现在为止,我是2。 看你执行赋值m=a[i++]。这里有优先权。首先将i为2的[i]赋给m,然后在此陈述中增加i的值。现在我是3.首先是赋值,然后是increment.which如果语句是m=a[++i]则不是这样。在这个语句中,我首先增加然后进行赋值