1.值传递
值传递,它传递的是实际参数的一个副本。
#include <stdio.h>
int main()
{
int a=1,b=2;//这里的a,b是实参
printf("调用前a=%d,b=%d\n",a,b);
swap1(a,b);//#调用此函数时,传入的实参的拷贝副本
printf("调用后a=%d,b=%d\n",a,b);//结果是a,b值没交换
return 0;
}
//值传递
void swap1(int x, int y){
//这里的x,y是形参
int temp;
temp=x;
x=y;
y=temp;
return;
}
运行结果如下:
调用前a=1,b=2
调用后a=1,b=2
2.引用传递
引用传递时,对形参的操作等同于对实参的操作。
注:这是C++才有的机制。
#include <iostream>
using namespace std;
int main()
{
int a = 1, b = 2;
cout << "调用前"<< "a = " << a <<",b =" << b << endl;
int &ra = a;
int &rb = b;
swap(ra, rb);
cout << "调用后"<< "a = " << a <<",b =" << b << endl;//结果是a,b值交换了
return 0;
}
//引用传递
void swap2(int &x, int &y){
//对形参的操作等同于对实参的操作
int temp;
temp=x;
x=y;
y=temp;
return;
}
运行结果如下:
调用前a = 1,b =2
调用后a = 2,b =1
3.指针传递
#include <stdio.h>
int main()
{
int a=1,b=2;//这里的a,b是实参
printf("调用前a=%d,b=%d\n",a,b);
//int *pa = &a;
//int *pb = &b;
//swap3(pa, pb);
//上面三句等价于下面一句
swap3(&a,&b);
printf("调用后a=%d,b=%d\n",a,b);//结果是a,b值交换了
return 0;
}
//指针传递
void swap3(int *x, int *y){
//这里的x、y就是形参,是外部实参(指针)的临时副本
int temp;
temp = *x;
*x = *y;
*y = temp;
return;
}
运行结果如下:
调用前a=1,b=2
调用后a=2,b=1