1、基本语法
int a = 10;
int &b = a;
b = 20;
2、本质——指针常量
上述过程实际为:
int a = 10;
int const * b = &a;//指针常量b,指向a的地址
*b = 20;//解引用修改a中值
可以看到,实际上b为指针常量,指向不可修改,这也是变量引用不可更改的原因。
3、使用
1、作为函数形参
void swap ( int & p1 , & p2 )
{
int temp = p1;
p1 = p2;
p2 = temp;
}
int main()
{
int a = 10;
int b = 20;
swap(a,b);//引用传递,形参修饰实参
}
实际上是对指向的值进行修改。
2、常量引用
引用常量时需要加const修饰
const int &a = 10;
//等价于
int temp = 10;
const int &a = temp;
必须引用合法的内存位置,不能引用常量区,要引用堆或栈中的变量,常量引用找不到原变量。
常用于函数形参,防止意外修改。
void showValue (const int &p)//const修饰后为只读
{
p = 1000;
cout << p << endl;
}
int main()
{
int a = 100;
showValue(a);//仍然输出100,不会被showValue函数修改为1000
return 0;
}
3、引用做函数返回值
不要返回局部变量的引用,局部变量的生存周期随函数运行完毕而结束。
int &test1()
{ int a = 10;
return a;
}
int main()
{
int &ref = test1();//原局部变量已被销毁
cout << ref << endl;//第一次输出10,为编译器保留的副本
cout << ref << endl;//第二次输出结果不正确
return 0;
}
可返回静态变量的引用,且可作为左值
int &test2()
{
static int a = 10;
return a;
}
int main()
{
int ref2 = test2();
cout << ref2 << endl;//输出10
cout << ref2 << endl;//输出10
test2() = 1000;//test2返回a变量的引用,可以对a的值进行修改
cout << ref2 << endl;//输出1000
cout << ref2 << endl;//输出1000
return 0;
}
暂时就写这么多叭=-=
次次都要找封面好烦哦