1、值传递
当进行值传递时,就是将实参的值复制到形参中,而实参和形参不是在同一个存储单元,所以函数调用结束后,实参的值不会发生改变。
#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<a<<","<<b<<endl;
}
int main()
{
int x=1;
int y=2;
swap(x,y);
cout<<x<<","<<y<<endl;
return 0;
}
//程序的输出结果为
//2,1
//1,2
2、指针传递
当进行指针传递时,形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量的单元,在函数中改变的不是实参的值,而是实参地址所指向的变量的值。
#include<iostream>
using namespace std;
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
cout<<*a<<","<<*b<<endl;
}
int main()
{
int x=1;
int y=2;
swap(&x,&y);
cout<<x<<","<<y<<endl;
return 0;
}
//程序的输出结果为
//2,1
//2,1
3、传引用
实参地址传递给形参,使形参的地址取实参的地址,从而使形参与实参共享同一单元的方式。
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<*a<<","<<*b<<endl;
}
int main()
{
int x=1;
int y=2;
swap(x,y);
cout<<x<<","<<y<<endl;
return 0;
}
//程序的输出结果为
//2,1
//2,1
4、全局变量传递
这里的“全局”变量并不见得就是真正的全局,只要这个变量的作用域足够这两个函数访问就可以了,比如一个类中的两个成员函数可以使用一个成员变量实现参数传递,或使用static关键字定义,或使用namespace进行限定等,而这里的成员变量在这种意义下就可成为“全局”变量。当然也可以使用一个类外的真正的全局变量来实现参数传递。
全局变量传递的优点是效率高,但它对多线程的支持不好。