C程序错误打印

Jam*_*oon 4 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;
} 
Run Code Online (Sandbox Code Playgroud)

首先printf打印1,而另一个printf打印9.i你可以看到我在此期间没有改变.为什么打印9?

Bat*_*eba 10

你指的x[j+1]时候j5.这超出了数组的范围.

因此,代码的行为是未定义的.(有趣的是,代码的行为与赋值中的x[6]等同j,x[7]正在i和特定的顺序一致,但依赖于任何一个.)