引用做函数参数
作用:做函数参数时,可以利用引用让形式参数修饰实参
优点:可以简化指针修改实参
代码示例:
//值传递传递
void swap01(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
//地址传递
void swap02(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//引用做函数参数;
void swap03(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
int& c = a;
//swap01(a,b); 值传递,形参不会修饰实参
//swap02(&a, &b); 地址传递,形参可以修饰实参
swap03(a, b);//引用做函数参数,形参会修饰实参
cout << "swap02 a= " << a << endl;
cout << "swap02 b= " << b << endl;
system("pause");
}
引用做函数返回值
注意:不要返回局部变量引用
用法:函数调用作为左值
代码示例:
//不能返回局部变量 局部变量由系统管理释放
//引用做函数返回值,函数调用作左值
int& test01()
{
int a = 10; //局部变量存放在栈区
return a;
}
int& test02()
{
static int a = 10; //static 静态变量存放在四区中的 全局区
return a;
}
int main()
{
//int &a = test01();
//cout << "a= " << a << endl;//第一次输出 系统做保留
//cout << "a= " << a << endl;//第二次输出错误 因为系统将内存释放
int& ref = test02();
cout << "test02 ref=" << ref << endl; //ref = 10
cout << "test02 ref=" << ref << endl;
test02() = 100;
cout << "test02 ref=" << ref << endl; //ref = 100
cout << "test02 ref=" << ref << endl;
system("pause");
return 0;
}
引用的注意事项
- 引用必须初始化 (不能取无效地址)
- 引用在初始化后,不可以改变。(一个别名不可以在作为其他的别名)
本文摘自 :https://blog.51cto.com/u