C程序错误打印

时间:2017-02-08 15:01:28

标签: c

#include <stdio.h>
int main() {
  int x[] = {2, 3, 1, 5, 6, 9};
  int j, i, s;
  for (i=0; i<6; i++){
    if (x[i] % 2 == 1){
      break;
    }
  }

  printf("%d", i);
  for (j=5; j>1; j--){
    x[j+1] = x[j];
  }
  printf("%d", i);

  return 0;
} 

首先printf打印1,而其他printf打印9。我可以看到,在此期间我没有改变i。为什么打印9?

1 个答案:

答案 0 :(得分:10)

x[j+1]j时,您会引用5。那不在数组的范围内。

因此,代码的行为未定义。 (有趣的是,您的代码行为与x[6]等同于jx[7]i以及作业中的特定顺序一致,但是 don& #39; t 依赖于任何一种。)