形参与实参(1)------函数形参与局部变量在内存中的处理

首先,实现一个“交换两个整形变量的值”的函数。

形参与实参(1)------函数形参与局部变量在内存中的处理

形参与实参(1)------函数形参与局部变量在内存中的处理

形参与实参(1)------函数形参与局部变量在内存中的处理

由结果可知,这样做并不能真正完成交换数据,手工分析如下:

形参与实参(1)------函数形参与局部变量在内存中的处理

由上图可见,Exchange()函数并没有更改main()函数中num1和num2的值。

在内存中的解释如下:

形参与实参(1)------函数形参与局部变量在内存中的处理

解释:先将主函数中的变量入栈(这个栈,指的是:操作系统内存管理角度的”系统堆栈“),

执行过程:先将num1入栈,再将变量num2入栈,执行Exchange()函数之前,要进行现场保护,即,将主函数现场信息入栈,再进入Exchange()函数,先将变量another入栈,再将one入栈(被调函数参数从右向左开始入栈),同时进行int one = num1;int another = num2;赋值操作,最后将temp入栈,同时也要保存Exchange()函数在执行时的栈顶指针。当Exchange()函数执行完毕后,栈顶指针回归到主函数现场信息处,继续主函数的执行。

完成真正的交换:

形参与实参(1)------函数形参与局部变量在内存中的处理

形参与实参(1)------函数形参与局部变量在内存中的处理

结果如下:

形参与实参(1)------函数形参与局部变量在内存中的处理

手工分析如下:

形参与实参(1)------函数形参与局部变量在内存中的处理

在内存中的解释如下:

形参与实参(1)------函数形参与局部变量在内存中的处理

解释:如同上面所说的一样,先入栈,只不过这块牵扯对所指向的空间进行操作。


对函数形参实参的理解到这,后续还会有有关系统堆栈、系统堆的知识,以及执行过程。

欢迎指正,共同讨论。