前言:
本文为另一篇博文C++函数参数传递的一大利器——引用(左值)中对函数参数传递方式的进一步探讨,部分内容涉及汇编语言,但不影响理解。
—————————————————————————————————————————————————————————————————————————————
编译器对函数调用的实现过程:
首先我们要知道,计算机对数据的处理是不断寻址、读写数据的过程。上升到程序层面,一个个函数在汇编语言中就是一段段汇编指令,这些汇编指令让计算机通过寄存器在内存中访问指定内存块地址并从中读写数据。除全局变量和其它一些形式定义的变量外,函数中的变量都存在栈内存中,程序对变量的修改、传递等一系列操作都是寄存器通过将内容或地址进栈、出栈来实现的。
下面看代码:
C++源代码:
#include <iostream>
using namespace std;
void swap1(int *const a, int *const b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void swap2(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void swap3(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void swap4(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int x = 3;
int y = 5;
int *p1 = &x, *p2 = &y;
cout << "初始值:" << "x = " << x << ",y = " << y << endl;
swap1(p1,p2);
cout << "执行swap1后:" << "x = " << x << ",y = " << y << endl;
swap2(x,y);
cout << "执行swap2后:" << "x = " << x << ",y = " << y << endl;
swap3(x, y);
cout << "执行swap3后:" << "x = " << x << ",y = " << y << endl;
swap4(p1, p2);
cout << "执行swap4后:" << "x = " << x << ",y = " << y << endl;
}
编译、执行上述程序后,结果显而易见:除了swap3函数以外,其余函数都能成功交换x和y的值。