变量引用
之前在C学的的指针,需要定义一个指针变量,且最好要初始化,不让可能成为野指针,而在C++这里初学的一个引用:
int a=10;//定义一个整型a
int &b=a;//引用操作或者叫取别名
学过指针的小伙伴应该理解,b相当于一个指向a的指针变量,可以操作变量a所在地址的值,
但是需要注意不能单独定义b,必须初始化,且初始化后不能改变b的指向了,相当于
int *const b=&a; 即b的指向不可以变,而其指向的内容可以变化,引用本质上就是指针常量。
int &b;//错误
函数引用
学C的时候在函数调用的时候我们习惯性用指针,比如
void swp(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=*temp;
}//定义函数
int main()
{
int a = 10;
int b = 20;
str(&a,&b);//函数参数址传递
return 0;
}
这是标准的函数参数址传递(值传递就不罗嗦了)。
而C++中的引用则比较类似,用起来简单方便,还与C中的址传递效果一样
void str(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}//定义函数
int main()
{
int a = 10;
int b = 20;
str(a,b);//函数参数引用
return 0;
}
是不是和址传递比较像,使用起来少了很多*****符号。
- 注意
- 引用做函数返回值时,不要返回局部变量
int &test01()//返回局部变量引用 { int a =10; return a; } int main() { int &ref=test01(); //返回的是局部变量的引用,局部变量在栈区,函数调用结束就会销毁,会导致下次ref的值发生变化 }
- 如果对函数参数传参进行引用,如果输入的值不要求改变,尽量使用const修饰,C里也要注意,即常量的引用。
void swp(const int &a);