使用引用参数:
void Swap1(int, int);
void Swap2(int*, int*);
void Swap2(int&, int&);
void Swap1(int num1, int num2)
{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
}
void Swap2(int* p1, int* p2)
{
int temp;
*temp = *p1;
*p1 = *p2;
*p2 = *temp;
}
void Swap3(int& ref1, int& ref2)
{
int temp;
temp = ref1;
ref1 = fer2;
ref2 = temp;
}
int main()
{
int num1 = 10, num2 = 5;
Swap1(num1, num2);
cout << "执行Swap1后" << num1 << " " << num2 << endl;
Swap2(&num1, &num2);
cout << "执行Swap2后" << num1 << " " << num2 << endl;
Swap3(num1, num2);
cout << "执行Swap3后" << num1 << " " << num2 << endl;
}
使用引用的理由:
可以更加简便的书写代码
可以直接传递某个对象,而不只是把对象复制一份。
要求只能实现传入参数的显示功能,而禁止显示函数修改后的值(禁止函数内部修改引用参数值)
解决方案:在参数中使用const
int show(const int& num1,const int& num2);
函数返回引用类型:
不要返回局部变量的引用
函数可以不返回值,默认返回传入的引用对象本身返回引用时,要求函数参数中包含被返回的引用对象
int &sum()//返回引用类型的函数
{
int num = 10;
//注意:rNum在sum()函数中定义的,所以叫做局部变量
//rNum的生存期只在sum()函数中;
int& rNum = num;
//函数中的局部变量会被内存回收
//所谓的内存回收,并不是吧内存保存的设置清零
//而是指内存中你的程序申请的这块内存以及不是你的了
return rNum;//返回一个局部的引用类型变量
}
int main()
{
//result在这里引用了一个局部变量
int result = sum();
cout << "result=" << result << endl;
return 0;
}
输出结果为 16;
int &sum(int& num1,int& num2)//返回引用类型的函数
{
num1++;
num2++;
//没有返回值
}
int main()
{
int num1 = 10, num2 = 15;
int result = sum(num1,num2);
cout << "result=" << result << endl;
return 0;
}
结果为55
建议解决方案:
将返回类型修改为const int& const int& sum(int& num){....}
const类型为不可修改的左值,sum(num)=55 将不合法
省略const'会使得函数的含义更加模糊,建议避免在设计函数中存在模糊的情况,因为模糊聚会增加犯错误机会,应尽量避免犯错。
使用引用参数的一些指导原则:
能够修改调用函数中的数据对象
数据对象大时传递引用可以提高程序的运行效率
函数中不需要修改传递的参数:
如果数据对象很小,建议传值传递
传递数组只能使用指针,并使用const关键字
较大的对象则使用const 指针或者引用,以提高程序效率
函数中需要修改传递的参数:
数据对象时基本类型或者结构时,可以使用指针或者引用(基本类型建议使用指针)
数据对象是数组时只能使用指针
数据对象是类对象时,要求使用引用