在线编译器 C

#include <stdio.h> enum{p = 10 }; int main() { int A[p], B[p]; for(int i = 0; i < p; i++) { scanf ("%d", &A[i]); } for(int i = 0; i < p; i++) { if (i == 0) { B[i] = A[p-i]; } else { B[i] = A[i-1]; } } for(int i = 0; i < p; i++) { printf ("%d", B[i]); } return 0; }
这段代码的功能是:先读入10个整数存入数组A,然后按照特定规则生成数组B,最后输出B的所有元素。规则是:B的第一个元素等于A的最后一个元素,B的其他元素等于A中前一个位置的元素(即B[i] = A[i-1])。

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

- 当i等于0时,你写的是B[0] = A[p-i],此时p-i等于10,而A数组的有效下标是0到9,访问A[10]会导致越界错误。你可能是想取A的最后一个元素,即A[9]。
- 注意数组下标从0开始,最后一个元素的下标是p-1,不是p。