关于传值的小问题
#include <iostream> #include <windows.h> int* fun(int* a) { std::cout << *a << std::endl;//这样有问题吗???? int temp = 100; return &temp;//这个是典型的错误 } int main() { int a = 9; int* temp = fun(&a);//传递&a,这个地址会不会在fun里面失效了?fun还是到了另外一个作用域了,我害怕这个栈上的内存失效了 std::cout << *temp << "\t" << *temp; getchar(); return 0; } 1.首先局部变量的地址在函数退出之前地址是不会失效的,所以在调用fun()的过程中a的地址不会失效 2.从栈的角度看首先main建立栈,将a压栈,然后fun建立栈,此时main栈没问题,所以访问没问题 然后fun返回,fun的栈销毁了,main没问题,等main返回时main的栈也没了,但这个栈和数据结构上的栈好像关系不大吧,但后进先出是共同点,调用过程就是逐级的创建栈,返回时按照相反的方向释放的。