C++的调用机制是什么,为什么结果会这样

img


C++程序为什么这个运行会这样,函数的调用机制是什么,初学者对此过程不太理解,希望能有了解的人帮忙解释一下 谢谢!

大概是
栈在生长main之后先生长了func1,在其中初始化了的局部变量n,并对其赋值
在fun1返回后,栈顶回退,但是func1存的值(在栈中的值)暂时没被清除(因为没有新的函数去覆盖它)
然后调用func2,栈再次从main向上拓展,此时m恰好与之前的n地址相同,而且没有被重新赋值
然后你再直接取m处取值,拿到的应该是n之前在栈中存放的值
只是我的理解,不一定完全准确
有帮助望采纳

fun2()里m没有赋予初始值,那么就没有开辟内存,所以访问的是上一个fun1()函数返回的n的值

你这问题问了太笼统了
如果你问为什么会输出12345,答案是纯属巧合,func1()释放后资源并没有清零,所以func2偶然返回12345

不能保证未来在两次调用之间不插入别的线程改变堆栈中残留的内存内容。