目录
一、基本语法
(1)一般语法
数据类型 &别名=原名;
(2)注意事项
①引用的本质就是起别名
②引用的变量与被引用的变量本质上就是同一个变量
③引用必须初始化
④引用初始化后不可以进行更改
int& b; //错误的,必须要初始化
(3)示例代码
int main()
{
int a = 10;
int &b = a;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
}
二、引用做函数参数
(1)值传递
值传递,形参不会修饰实参
//交换函数
void mySwap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "swap01 a=" << a << endl;
cout << "swap01 b=" << b << endl;
}
int main()
{
int a = 10;
int b = 20;
mySwap01(a,b); //值传递,形参不会修饰实参
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
(2)地址传递
地址传递,形参会修饰实参
void mySwap02(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "swap02 a=" << *a << endl;
cout << "swap02 b=" << *b << endl;
}
int main()
{
int a = 10;
int b = 20;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
mySwap02(&a, &b);
}
(3)引用传递
引用传递,形参会修饰实参
void mySwap03(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
cout << "swap03 a=" << a << endl;
cout << "swap03 b=" << b << endl;
}
int main()
{
int a = 10;
int b = 20;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
mySwap03(a, b);
}
三、引用做函数返回值
(1)注意事项
①不要返回局部变量的引用
int &test()
{
int a = 10; //局部变量,存放在栈区(自动释放)
return a;
}
int main()
{
int& ref = test();
cout << "ref=" << ref << endl; //第一次结果正确,因为编译器做了保留
cout << "ref=" << ref << endl; //第二次结果错误,因为编译器已经释放
system("pause");
}
(2)左值引用
int &test()
{
static int a = 10; //静态变量,存放在全局区,全局区变量数据在程序结束时释放
return a;
}
int main()
{
int& ref2 = test();
cout << "ref2=" << ref2 << endl;
cout << "re2f=" << ref2 << endl;
test() = 20; //如果函数的返回值是引用,这个函数调用可以作为左值
cout << "ref2=" << ref2 << endl;
system("pause");
}
四、常量引用
函数形参列表中,可以加const修饰形参,防止形参改变实参
(1)示例代码
int main()
{
int a = 10;
//加上const后编译器将代码修改
//int temp=10;const int &ref=temp;
const int& ref = 10;
ref = 20; //此时会报错,加上const变为只读不可修改
}
//打印数据的函数
void showValue(const int &value)
{
value = 1000; //会报错,const后函数体内的value不可更改
cout << "value=" << value << endl;
}
int main()
{
int a = 100;
showValue(a);
}