1. 值传递
值传递当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(将实参的值传递给形参)。这一过程是参数值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了什么样的改变,都不会影响到实参。
#include<iostream>
using namespace std;
void swap(int a,int b)
{
int t = a;
a = b;
b = t;
}
int main(){
int x = 5,y = 10;
cout<<"x="<<x<<" y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
return 0;
}
2. 引用传递
引用是一种特殊类型的变量,可以被认为是另一个变量的别名,通过引用名与通过被引用的变量名访问变量的效果是一样的,此时使得在子函数中对形参做的更改对主函数中的实参是有效果的
int i,j;
int &a = i; a为引用名,i为被引用的变量名
j = 10;
a = j;
引用可以作为形参,形参的初始化不在类型说明时进行,而是在执行主调函数中的调用表达式时,才是形参分配内存空间,同时用实参来初始化形参。这样引用类型的形参就通过形实结合,成为实参的一个别名,对形参的任何操作直接作用在实参上。
使用时需注意:
- 声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象
- 一旦一个引用被初始化后,就不能改为指向其他对象
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int t = a;
a = b;
b = t;
}
int main(){
int x = 5,y = 10;
cout<<"x="<<x<<" y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
return 0;
}