作用: 给变量起别名
语法: 数据类型 &别名 = 原名
int a = 10; //含义:在栈上开辟了4字节的内存,内存存放的数据是10
int& b = a;
cout << "a = " << a << '\t' << &a << endl;
cout << "b = " << b << '\t' << &b << endl;
- 引用必须初始化
- 引用在初始化后就不可以改变了
int a = 10; //含义:在栈上开辟了4字节的内存,内存存放的数据是10
//别名
int& b = a;
cout << "a = " << a << '\t' << &a << endl;
cout << "b = " << b << '\t' << &b << endl;
int c = 20;
//b = &c;
b = c; //赋值操作,而不是更改引用
cout << "a = " << a << '\t' << &a << endl;
cout << "b = " << b << '\t' << &b << endl;
cout << "c = " << c << '\t' << &c << endl;
作用: 函数传参时,可以利用引用的技术让形参修饰实参 优点: 可以简化指针修改实参
//传递引用修饰实参
void swap3(int& pA, int& pB)
{
int temp = pA;
pA = pB;
pB = temp;
cout << pA << endl;
cout << pB << endl;
}
作用:引用是可以作为函数的返回值存在的
注意:==不要返回局部变量的引用== 用法:函数调用作为左值
int& func()
{
int a = 10; //局部变量
return a;
}
int& func2()
{
static int a = 20;
return a;
}
本质:==引用的本质在C++内部实现是一个指针常量==
//发现是引用,转换为 int* const ref=&a
void func(int& ref) {
ref = 100; //ref是引用,转换为 *ref = 100
}
int main() {
//int a = 10;
//func(a);
//cout << a << endl;
int a = 10;
//自动转换为 int* const ref=&a 指针常量是指针指向不可改,也说明为什么引用不可以更改
int& ref = a;
ref = 100; //内部发现 ref 是引用,自动帮我们转换为 * ref=100;
system("pause");
return 0;
}
作用: 常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加==const修饰形参==,防止形参改变实参
//发现是引用,转换为 int* const ref=&a
void func(const int& ref) {
//ref = 1000; //ref是引用,转换为 *ref = 100
cout << ref << endl;
}
int main() {
int a = 10;
//int& ref = 10; 引用必须引一块合法的内存空间
//const int& ref = 10; //编译器将代码修改 int temp=10; int & ref=temp;
int& ref = a;
func(10);
system("pause");
return 0;
}