指针在C函数内部的奇怪行为

dj *_*uen 3 c gcc pointers

谁可以给我解释一下这个

main()
{
 int *x,y;
 *x = 1;
  y = *x;
 printf("%d",y);
}
Run Code Online (Sandbox Code Playgroud)

当我在gcc中编译它时如何在main函数中运行它是正常的,而在不同的函数中运行它不会像下面的函数一样工作?

test()
{
 int *x,y;
 *x = 1;
  y = *x;
 printf("%d",y);
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 12

int *x,y;
*x = 1;
Run Code Online (Sandbox Code Playgroud)

未定义的行为.x没有任何意义.

这是正确的:

int *x, y, z;
x = &z;
*x = 1;
y = *x;
Run Code Online (Sandbox Code Playgroud)

要么

int *x, y;
x = malloc(sizeof(int));
*x = 1;
y = *x;
//print
free(x);
Run Code Online (Sandbox Code Playgroud)

未定义的行为是未定义的.你不知道它会如何表现.它似乎工作,崩溃,打印不可预测的结果和其他任何东西.或者它可以在不同的运行中表现不同.不要依赖未定义的行为