Онлайн компилятор C

#include <stdio.h> int main() { int arr[10]; int res[10]; for (int i = 0; i < 5; i++) { scanf("%d", &arr[i]); res[i]=arr[4-i]; }for(int i=5;i<10;i++){ res[i]=arr[14-i];} printf("%d\n",res[10]); return 0; }
这段代码试图将数组 `arr` 中的前5个元素反转后存入 `res` 的前5个位置,然后对后5个元素也做类似操作,但存在几个问题。

- 代码中 `res[i]=arr[4-i]` 这一行,当 `i` 从0到4时,`arr[4-i]` 会访问 `arr[4]` 到 `arr[0]`,这确实实现了前5个元素的反转。但注意,`arr` 只被输入了前5个元素,后5个元素未初始化,因此 `arr[14-i]` 会访问未初始化的内存,导致未定义行为。
- 最后 `printf("%d\n",res[10])` 试图输出 `res[10]`,但数组 `res` 的大小是10,有效索引是0到9,访问 `res[10]` 越界了。

- 检查数组索引的范围,确保不越界访问。
- 思考如何正确地将 `arr` 中所有10个元素反转存入 `res`,而不是只处理前5个。