zoukankan      html  css  js  c++  java
  • 关于传值的小问题

    #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 << "	" << *temp;
        getchar();
        return 0;
    }
    1.首先局部变量的地址在函数退出之前地址是不会失效的,所以在调用fun()的过程中a的地址不会失效
    2.从栈的角度看首先main建立栈,将a压栈,然后fun建立栈,此时main栈没问题,所以访问没问题
    然后fun返回,fun的栈销毁了,main没问题,等main返回时main的栈也没了,但这个栈和数据结构上的栈好像关系不大吧,但后进先出是共同点,调用过程就是逐级的创建栈,返回时按照相反的方向释放的。
  • 相关阅读:
    C++中pair的用法
    DFS例题:力扣200:岛屿数量
    DFS例题:力扣695:岛屿的最大面积
    DFS深度优先遍历
    java AQS源码分析
    spring实现事务原理
    java常见并发面试题目+示例代码
    java并发锁
    ThreadPoolExecutor
    线程通信
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3883914.html
Copyright © 2011-2022 走看看