zoukankan      html  css  js  c++  java
  • 87、C++函数调用的压栈过程

    #include <iostream>
    using namespace std;
    int f(int n)
    {
    cout << n << endl;
    return n;
    }
    void func(int param1, int param2)
    {
    int var1 = param1;
    int var2 = param2;
    printf("var1=%d,var2=%d", f(var1), f(var2));//如果将printf换为cout进行输出,输出结果则刚好相反
    }
    int main(int argc, char* argv[])
    {
    func(1, 2);
    return 0;
    }
    //输出结果
    //2
    //1
    //var1=1,var2=2

    1.当函数从入口函数main函数开始执行时,编译器会将我们操作系统的运行状态,
    main函数的返回地 址、main的参数、mian函数中的变量、进行依次压栈;

    2.当main函数开始调用func()函数时,编译器此时会将main函数的运行状态进行压栈,
    再将func()函数的返回地址、func()函数的参数从右到左、func()定义变量依次压栈;

    3.当func()调用f()的时候,编译器此时会将func()函数的运行状态进行压栈,
    再将的返回地址、f()函数的参 数从右到左、f()定义变量依次压栈

    4.从代码的输出结果可以看出,函数f(var1)、f(var2)依次入栈,
    而后先执行f(var2),再执行f(var1),最后 打印整个字符串,
    将栈中的变量依次弹出,最后主函数返回。


  • 相关阅读:
    《大型网站技术架构》读后感
    质量属性
    课堂作业02
    课堂作业01
    《软件构架实践》读后感06
    《软件构架实践》读后感05
    Storm系列三: Storm消息可靠性保障
    Storm系列二: Storm拓扑设计
    Storm系列一: Storm初步
    网络层协议
  • 原文地址:https://www.cnblogs.com/crbhf/p/14994884.html
Copyright © 2011-2022 走看看