在线编译器 C

#include <stdio.h> int main() { int a[12]; for(int i=0;i<12;i++){scanf("%d",&a[i]);} for(int i=8;i<12;i++){int t=a[i];a[i]=a[i+8];a[i+8]=t;} for(int i=0;i<12;i++){printf("%d ",a[i]);} return 0; }
这段代码首先读取12个整数存入数组a,然后尝试交换数组中的某些元素,最后输出整个数组。

代码中有一个关键问题:在交换循环中,当i从8到11时,访问了a[i+8],即a[16]到a[19],但数组a只有12个元素(索引0到11),这会导致数组越界访问。

- 检查交换逻辑:你试图交换a[8]到a[11]与a[16]到a[19],但a[16]到a[19]并不存在。思考一下你实际想要交换的是哪两个部分。
- 考虑数组索引范围:数组a的大小是12,有效索引是0到11。任何超出这个范围的访问都是错误的。