奇怪的行为在c

use*_*065 1 c arrays pointers

可能重复:
可以在其范围之外访问局部变量的内存吗?

我最近遇到了以下代码:

#include <stdio.h>

int* abc () {
   int a[3] = {1,10,100};
   return a;
}
int* xyz () {
   int b[1] = {222};
   return b;
}
int main() {
   int *a, *b;
   a = abc();
   b = xyz();
   printf("%d\n", *a);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是222.'a'指向在里面声明的数组xyz().

我的问题是:

  1. 为什么指向内部声明的数组xyz().

  2. 函数xyz()执行后声明的数组应该超出范围.为什么没有发生?

Ker*_* SB 8

2:它正在发生,整个程序都有未定义的行为.这不是一个正确的程序,并且对于ifs和buts几乎没有任何意义.