首页 > 解决方案 > 为什么这个 C 程序打印 3 2 15 而不是 2 3 20?

问题描述

#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("%d, %d, %d", i, j, m);
}

你能解释一下这个程序背后的逻辑吗?

标签: c

解决方案


像这样尝试(或使用您的调试器,或者只是在一张纸的帮助下仔细考虑)

#include <stdio.h>
int main()
{
    int a[5] = {5, 1, 15, 20, 25};
    int i, j, m;
    i = ++a[1]; fprintf(stderr, "i is %d; a[1] is %d\n", i, a[1]);
    j = a[1]++; fprintf(stderr, "j is %d; a[1] is %d\n", j, a[1]);
    m = a[i++]; fprintf(stderr, "m is %d, i is %d; a[i] is %d\n", m, i, a[i]);
    printf("%d, %d, %d", i, j, m);
}

查看在 ideone 上运行的代码


推荐阅读