意外输出涉及具有后期和预增量的数组值

rae*_*rem -5 c pre-increment post-increment

以下程序的输出不应该是 -

2 3 20

相反,它正在显示

3 2 15

任何人都可以解释这背后的原因吗?

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

Sou*_*osh 7

3 2 15

是正确的输出.

  1. i是3,因为ii = ++a[1];预增量中变为2 ,然后在后增加m = a[i++];
  2. j 是2,因为j = a[1]++;之后没有变化.
  3. m是15,因为m = a[i++]; i正在增加后,旧的价值i(这是2)在索引和对增量后使用i测序的评价后=声明.

话虽如此,推荐的签名main()int main(int argc, char *argv[])或至少是,int main(void).

  • 自`C99`以来@FUZxxl`insert int rule`已被删除.我提到的签名是在同一标准中推荐的.只是想让OP意识到最新的标准.请注意**推荐**部分.希望很清楚.:-) (3认同)