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),最后 打印整个字符串,
    将栈中的变量依次弹出,最后主函数返回。


  • 相关阅读:
    剩余类&完全剩余组
    同余验算法
    一种快速余数求法
    同余的性质II
    同余初步
    求N个数的最小公倍数
    N个数GCD求解法
    快速求解GCD的三个Trick
    质数的几个有趣问题
    等比数列求和公式
  • 原文地址:https://www.cnblogs.com/crbhf/p/14994884.html
Copyright © 2011-2022 走看看