关于传值的小问题

#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的栈也没了,但这个栈和数据结构上的栈好像关系不大吧,但后进先出是共同点,调用过程就是逐级的创建栈,返回时按照相反的方向释放的。

 

posted @ 2014-08-01 01:19  zzyoucan  阅读(246)  评论(0编辑  收藏  举报