Online Compiler C

#include<stdio.h> int main() { int arr[10]; int i; int a; for(i=0;i<10;i++){ scanf("%d",&arr[i]); } a=arr[9]; for(i=1;i<10;i++) { arr[i+1]=arr[i]; } arr[0]=a; for(i=0;i<10;i++){ printf("%d ",arr[i]); } return 0; }
这段代码试图将数组元素循环右移一位,但存在逻辑错误。

代码首先读取10个整数存入数组,然后保存最后一个元素到变量a,接着从索引1开始将每个元素赋值给下一个位置,最后把a放到索引0。这样做的本意是让所有元素右移一位,但循环从i=1开始会导致数组索引越界,并且覆盖了未移动的元素。

- 当i=9时,arr[i+1]即arr[10]超出了数组范围,这是未定义行为。
- 循环应该从数组末尾向前遍历,而不是从开头向后,否则会丢失数据。