在C++中函数的“引用传递”的本质就是一个指针常量 指向的是特定的内存并且,可以修改其中的数据 而在“地址传递”中也是指向特定地址,可以修改数据,而不可以修改指向,我很疑惑,可不可以说其实“引用传递”就是“地址传递”呢?如果不是,那么他们区别在哪里呢?
#include
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;
}