Online Compiler C

#include <stdio.h> int main() { int arr[10]; int res[10]; for(int i=0;i<10;i++){ scanf("%d",&arr[i]); } for (int i = 0; i < 5; i++) { res[i] = arr[4 - i]; } for (int i = 0; i < 5; i++) { res[i + 5] = arr[9 - i]; } for (int i = 0; i < 10; i++) { printf("%d ", res[10]); } return 0; }
这段代码的目的是将输入的10个整数数组进行某种对称交换,然后输出结果。但代码中存在几个问题。

- 在最后的输出循环中,你使用了 `res[10]`,但数组 `res` 的有效索引范围是0到9,`res[10]` 访问了越界的内存,这会导致未定义行为。你应该输出 `res[i]` 而不是固定索引。
- 你的交换逻辑似乎是想把前5个元素反转,后5个元素也反转,但注意 `arr[4 - i]` 当 `i=0` 时取的是 `arr[4]`,而 `arr[9 - i]` 当 `i=0` 时取的是 `arr[9]`,这会导致结果数组的前半部分和后半部分都从原数组的中间开始取值,可能不是你想要的效果。检查一下你的索引计算是否符合预期。