无法理解此代码堆栈存储函数调用c的输出

ish*_*oni 0 c stack function

我有以下代码,但是我不明白为什么以及它输出它的作用.

int main(){
   int *i;
   int *fun();
   i=fun();
   printf("%d\n",*i);
   printf("%d\n",*i);
}

int *fun(){ 
   int k=12;
   return(&k);
}
Run Code Online (Sandbox Code Playgroud)

输出为12和垃圾值.有人可以解释输出吗?

它不应该两次都返回垃圾值吗?

我知道它k是本地的fun(),因此它将存储在堆栈中,并且当它fun()超出范围时它将被销毁.我在这里错过了什么概念?

Kir*_*rov 5

它不会同时返回垃圾值吗?

返回后fun,k不再存在,所以打印值,存储在地址中的k未定义的行为.

这就是你有不同/垃圾价值的原因.

k是fun()的本地,所以它会被存储在堆栈中,当有趣的结束时,激活会被破坏,或者我错过了一些概念?

你不会遗漏任何东西,除了这个事实,堆栈不会被立即"废止​​",或类似的东西.换句话说,在返回之后fun,编译器可以随意使用这个内存做任何事情.