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


原文地址:https://www.cnblogs.com/crbhf/p/14994884.html