请问不是说函数执行完和会清除栈区的数据吗,
像fuc()返回的地址就被删除了,但为什么我如果将函数修改为返回a的值,这样就没问题了,不应该也有问题吗
请问不是说函数执行完和会清除栈区的数据吗,
函数在返回的时候,其实是做了一次复制,也就是把返回值复制到变量中。注意,这里的复制只是单纯的复制返回值本身,而不是复制内存。(这就牵扯到浅拷贝和深拷贝的问题,你可以百度一下)
当返回值是int *时,复制的是指针本身,而不是指针的值,但是这个指针指向的内存是系统分配的,在结束后会回收,所以,哪怕函数返回了指针,但是系统仍然可以对这块内存的数据进行修改。
当返回值是int类型时,变量得到的就是值本身,所以这样是没有问题的。