所谓的自动销毁是指写开禁,比如你这个程序运行时用到了int *p,这个p在电脑的内存里就占了一个位置,你在电脑上再运行其它程序的时候,就不能把那个位置分配给其它程序使用了。
当你函数结束后,这个变量自动销毁了,也就是允许其它程序得到这个变量在内存中的位置了,但是这个位置的数据并没有改变,电脑没必要给这个位置进行清零操作。所以如果你在新的程序中得到这个位置后,没有初始化,而是直接调用这个位置的值,那么得到的还是上一次那个变量的值。
那么这段代码可以运行是因为,你返回的地址在内存中仍然存在.return (int)&val。就是说,发生了隐式类型转换c/c++完全可以做到把整型变量当做指针使用,那么,假如其他程序又用到这个地址,程序就会奔溃。切记不要返回局部变量的地址,如果非要这么做,使用new运算符。
val那块内存地址随时都有可能被收回重新利用,所以返回临时变量的指针是不安全的