语法:数据类型 &别名=原名
int a=10;
int &b=a;
引用的注意事项
//1.引用必须初始化
int &b=a;
//2.引用一旦初始化后不可以更改(名字)
int c=20;
b=c//合理 赋值
值传递:形参不会修饰实参
地址传递
//地址传递 形参修饰实参
int swap(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
引用传递
//引用传递 形参修饰实参
int swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值
//数据类型后加&,相当于以引用的方式返回
int &fun1()
{
int a=10;//局部变量存储在栈区,
return a;
}
int &fun2()
{
static int a=10;//静态变量存放在全局区,程序结束后由系统释放
return a;
}
int main()
{
//不要返回局部变量引用 局部变量操作后会自动完全释放
int& ref=fun1();//别名 int &b=a
cout<<"ref="<<ref<<endl;//正确 编译器保留
cout<<"ref="<<ref<<endl;//错误 内存释放
int& ref1=fun2();
cout<<"ref1="<<ref<<endl;
cout<<"ref1="<<ref<<endl;
//函数调用可以作为左值
cout<<"ref1="<<ref<<endl;
cout<<"ref1="<<ref<<endl;
}
引用的本质是一个指针常量 (指针指向不可改,故引用不可改)
void fun(int &ref)
{
ref=100;
}
int main()
{
int a=20;
//自动转换 int * const ref=&a;
int &ref=a;
ref=20;
system("pause");
return 0;
}
常量指针防止误操作
void fun(const int &a)
{
//a=1000 不可修改
}
原文:https://www.cnblogs.com/panq/p/14860933.html