using namespace std;
#include
//交换函数
//1.值传递
void swap01(int num1, int num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
cout << "值传递交换数据" << "a=" << num1<< "\tb=" <<num2<<'\n'<< endl;
}
//2,地址传递
void swap02(int *num1,int *num2)
{
int * p = num1;
*num1 = *num2;
*num2 = *p;
cout << "地址传递交换数据" << "a=" << *num1 << "\tb=" << *num2 << '\n' << endl;
*num1 = 30;
*num2 = 40;
}
//3.引用传递
void swap03(int& num1, int& num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
cout << "引用传递交换数据" << "a=" << num1 << "\tb=" << num2 << '\n' << endl;
num1 = 50;
num2 = 60;
}
//总结:值传递形参不会修饰实参 地址传递与引用传递 形参会修饰实参
int main()
{
int a = 10, b=20;
cout << "原始数据" << "a=" << a << "\tb=" << b<<'\n'<<endl;
swap01(a, b);//值传递形参不会改变实参
cout << "值传递交换之后的原始数据" << "a=" << a << "\tb=" << b << '\n'<<endl;
swap02(&a, &b);//值传递形参改变实参也会改变
cout << "地址传递交换后数据" << "a=" << a << "\tb=" << b<<'\n'<<endl;
swap03(a, b);//引用传递形参会修饰实参
cout << "引用传递交换后数据" << "a=" << a << "\tb=" << b << '\n' << endl;
return 0;
}
我认为c++之所以提供引用,主要因为有重载操作符存在。
引用传递类似一个语法糖,让你不定义指针而达到传递指针的效果
如果你使用指针传递,那么很容易把(*p)++和*(p++)弄混
所以对于不熟悉指针的人来说,引用传递是比较方便的一种用法
而传递指针就更灵活了,你不仅可以传指针还可以传二级指针、三级指针,可以对值进行操作也可以直接对指针进行操作
引用传递就是地址传递啊,本质都已经是一个指针常量了,传递的就是实参的地址,会随着形参的改变而改变,而且二级指针和指针地址效果也是一样,引用传递比指针传递写法更简洁点