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

#include <stdio.h> int main() { int a[12]; for(int i=0;i<12;i++){scanf("%d",&a[i]);} for(int i=0;i<12;i++){a[i]=a[i+1];} for(int i=0;i<12;i++){printf("%d ",a[i]);} return 0; }
这段代码首先读入12个整数存入数组a,然后试图将每个元素替换为下一个元素的值,最后输出数组。但这里有一个问题:在第二个循环中,当i=11时,访问a[i+1]即a[12],这超出了数组边界,会导致未定义行为。另外,这个操作实际上是把所有元素向左移动了一位,但最后一个元素a[11]会被赋值为a[12](越界),而第一个元素a[0]的值会丢失。

- 检查第二个循环的边界条件,思考当i等于11时,a[i+1]是否有效。
- 考虑如果目的是将数组元素循环左移一位,那么最后一个元素应该从哪里取值?