在C中使用指针调用变量后更改值

在C中使用指针调用变量后更改值,c,pointers,C,Pointers,所以我开始用C语言编程。现在我对指针有一个问题: int * diff(){ int array[2] = {1,2}; return array; } int main(int argc, char const *argv[]) { int *p; p = diff(); printf("%d\n", *(p)); printf("%d\n", *(p)); return 0; } 所以在启动程序之后。我的终端显示以下内容: 1 0 那么为什么*p的值在变化

所以我开始用C语言编程。现在我对指针有一个问题:

int * diff(){
  int array[2] = {1,2};
  return array;
}

int main(int argc, char const *argv[]) {
  int *p;
  p = diff();
  printf("%d\n", *(p));
  printf("%d\n", *(p));

  return 0;
}
所以在启动程序之后。我的终端显示以下内容:

1
0

那么为什么*p的值在变化呢

程序的行为未定义

array
具有自动存储持续时间(非正式地,将其视为“局部变量”),并且该语言不允许取消对返回到
main
的指向它的指针的引用


(我们称之为悬空指针)。

返回指向局部变量==未定义行为的指针。@down,考虑到问题编写得很好,代码段也很好,有点苛刻。作为一个初学者,很难想出搜索词。先生,吹毛求疵:“该语言不允许取消对返回到main的指向它的指针的引用”,好吧,该语言永远不会阻止你,它只说它将是UB。