我有以下代码,但是我不明白为什么以及它输出它的作用.
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()
超出范围时它将被销毁.我在这里错过了什么概念?
它不会同时返回垃圾值吗?
返回后fun
,k
不再存在,所以打印值,存储在地址中的k
是未定义的行为.
这就是你有不同/垃圾价值的原因.
k是fun()的本地,所以它会被存储在堆栈中,当有趣的结束时,激活会被破坏,或者我错过了一些概念?
你不会遗漏任何东西,除了这个事实,堆栈不会被立即"废止",或类似的东西.换句话说,在返回之后fun
,编译器可以随意使用这个内存做任何事情.
归档时间: |
|
查看次数: |
67 次 |
最近记录: |