在线编译器 C

#include <stdio.h> int main() { const int n = 10; int arr[n]; int i, l; for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); } l=arr[9]; for(i=0;i<10;i++){ arr[i]=arr[i+1]; } arr[0]=l; for(i=0;i<10;i++){ printf("%d",arr[i]); if (i!=9){ printf(" "); } } printf("\n"); return 0; }
这段代码的作用是:读取10个整数存入数组,然后将数组元素循环左移一位(即第一个元素移到末尾,其余元素依次前移),最后输出移动后的结果。

代码中存在一个数组越界访问的问题。

- 在第二个循环中,当 `i=9` 时,`arr[i+1]` 访问了 `arr[10]`,这超出了数组 `arr` 的有效范围(下标0到9)。这会导致未定义行为,可能读取到错误的值或导致程序崩溃。
- 循环左移的正确思路是:从下标0开始,将每个元素替换为下一个元素,但最后一个元素(下标9)需要特殊处理,不能访问 `arr[10]`。