c - 为什么这个 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);
}
你能解释一下这个程序背后的逻辑吗?
解决方案
像这样尝试(或使用您的调试器,或者只是在一张纸的帮助下仔细考虑)
#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);
}
推荐阅读
- spring-boot - 无法使用 Mockito/JMockit/Deencapsulation 模拟或绕过静态方法
- postgresql - 搜索有口音的名字
- java - 保持连接到没有互联网的网络 - Android
- javascript - 在 Node 中生成 XLS 文件
- javascript - 重新加载 vue.js 单个应用程序时出现错误,请参阅 vue.js 代码
- javascript - WKWebView 在后台时不运行 JavaScript
- javascript - 为什么最后是在 Promise 之前执行的呢?
- amazon-web-services - 如何在位于两个不同可用区的两个实例上集成 Hashi corp vault 并使它们使用相同的后端?
- javascript - 如何在 dockedItems 中水平显示元素并正确隐藏树条目。extjs
- linux - 如何从linux中的压缩文件中删除第一行和最后一行