形参与实参(1)------函数形参与局部变量在内存中的处理
首先,实现一个“交换两个整形变量的值”的函数。
由结果可知,这样做并不能真正完成交换数据,手工分析如下:
由上图可见,Exchange()函数并没有更改main()函数中num1和num2的值。
在内存中的解释如下:
解释:先将主函数中的变量入栈(这个栈,指的是:操作系统内存管理角度的”系统堆栈“),
执行过程:先将num1入栈,再将变量num2入栈,执行Exchange()函数之前,要进行现场保护,即,将主函数现场信息入栈,再进入Exchange()函数,先将变量another入栈,再将one入栈(被调函数参数从右向左开始入栈),同时进行int one = num1;int another = num2;赋值操作,最后将temp入栈,同时也要保存Exchange()函数在执行时的栈顶指针。当Exchange()函数执行完毕后,栈顶指针回归到主函数现场信息处,继续主函数的执行。
完成真正的交换:
结果如下:
手工分析如下:
在内存中的解释如下:
解释:如同上面所说的一样,先入栈,只不过这块牵扯对所指向的空间进行操作。
对函数形参实参的理解到这,后续还会有有关系统堆栈、系统堆的知识,以及执行过程。
欢迎指正,共同讨论。