c++学习笔记1.2函数参数传递方式
参数传递的定义
在C++语言中,使用函数调用所给出的实参(实际参数,actual arguments)向函数定义所给出的形参(形式参数,formal arguments)设置初始的过程叫做参数传递(argument passing)。
参数传递的方式
通常来说在C++中调用函数时有三种参数传递方式:
(1)传值调用。
(2)传址调用(传指针)。
(3)引用传递。
总体上参数传递可以分为两类,由形参的类别决定:值调用(call by value)和引用调用(call by reference)。除了定义为引用类型的形参外,其他类型的都是值调用。指针的传递也是值的传递,只不过传递的值是地址。
值传递
按照值传递的方式进行参数的传递的时候,实参被复制了一份。函数体内修改参数变量时修改的是实参的一份副本,而实参本身是没有改变的,所以如果想要通过函数改变对应实参的值的话,不能使用值传递这种方法,使用指针或者引用可以达到对应的目的。
参考示例一:值传递
#include <iostream>
using namespace std;
int main()
{
void swap(int, int);//声明交换函数
int i = 3, j = 5;
swap(i, j); //调用交换函数swap
cout << i << " " << j << endl;
return 0;
}
void swap(int a, int b)
{
int temp;
temp = a; //对于参数a,b进行交换
a = b;
b = temp;
}
运行结果为,
可以看出,函数的值传递方式,只是将实参i,j的值传入对应的形参a,b中去,而在swap函数中只交换了a与b的值,并没有对于实参i,j进行操作。
如果要实现交换,只能使用指针传递
参考示例二:指针传递
#include <iostream>
using namespace std;
int main()
{
void swap(int *, int *);//声明交换函数
int i = 3, j = 5;
swap(&i, &j); //实参是变量的地址
cout << i << " " << j << endl;
return 0;
}
void swap(int *a, int *b) //形参是指针变量
{
int temp;
temp = *a; //对于参数*a,*b地址中的数据进行交换
*a = *b;
*b = temp;
}
运行结果为,
可以发现通过指针作为形参,可以进行修改。
引用传递
根据上篇文章我们对于引用的理解,可以知道引用只是一个外号。使用引用传递,修改的形参就是实参,他们占用相同的内存空间。
参考示例三:引用传递
#include <iostream>
using namespace std;
int main()
{
void swap(int &, int &);
int i = 3, j = 5;
swap(i, j);
cout << i << " " << j << endl;
return 0;
}
void swap(int &a, int &b) //形参是引用类型
{
int temp;
temp = a;
a = b;
b = temp;
}
运行结果为,
可以看出引用传递实现了交换功能。