函数结束后,函数所占空间会自动销毁。那下面代码为什么还能得到局部变量的地址与值呢?

2024-12-28 22:33:40
推荐回答(3个)
回答1:

所谓的自动销毁是指写开禁,比如你这个程序运行时用到了int *p,这个p在电脑的内存里就占了一个位置,你在电脑上再运行其它程序的时候,就不能把那个位置分配给其它程序使用了。
当你函数结束后,这个变量自动销毁了,也就是允许其它程序得到这个变量在内存中的位置了,但是这个位置的数据并没有改变,电脑没必要给这个位置进行清零操作。所以如果你在新的程序中得到这个位置后,没有初始化,而是直接调用这个位置的值,那么得到的还是上一次那个变量的值。

回答2:

那么这段代码可以运行是因为,你返回的地址在内存中仍然存在.return (int)&val。就是说,发生了隐式类型转换c/c++完全可以做到把整型变量当做指针使用,那么,假如其他程序又用到这个地址,程序就会奔溃。切记不要返回局部变量的地址,如果非要这么做,使用new运算符。

回答3:

val那块内存地址随时都有可能被收回重新利用,所以返回临时变量的指针是不安全的