✨一:引用的本质
😜1. 引用的本质通常来说就是起别名。但是它的实质在c++内部就是指针常量。
如:
int num1 = 10;
int &num2 = num1; // int *const num2 = &num1; 也说明了引用必须初始化
补充:**指针常量**和**常量指针**
指针常量:
int a = 10, b = 20;
int * const p = &a;
*p = 30; // p指向的地址是一定的,但其内容可以修改
常量指针:
int a = 10, b = 20;
const int *p = &a;
p = &b; // 指针可以指向其他地址,但是内容不可以改变
✨二:引用的注意事项
😜1. &在此不是求地址运算 , 而是起标识作用。
😜2. 类型标识符是指目标变量的类型。
😜3. 必须在声明引用变量时进行初始化。
😜4. 引用初始化后不能改变。
😜5. 不能有NULL引用。
😜6. 可以建立对数组的引用。(后面详解)
✨ 三:实例
😜1. 数组的引用
void test02()
{
typedef int array1[6];
int array2[6] = {1,2,3,4,5,6};
array1& array3 = array2;
for (int i = 0;i < 6;i++)
{
cout << array2[i] << " ";
}
cout << endl;
for (int i = 0;i < 6;i++)
{
array3[i] = array2[i];
cout << array3[i] << " ";
}
cout << endl;
}
结果:
😜2. 指针的引用
struct Student01
{
int Age = 18;
};
void Student_Init_Pointer(Student01 **student)
{
*student = (Student01*)malloc(sizeof(student));
(*student)->Age = 19;
}
void Student_Init_Reference(Student01 *&student)
{
student->Age = 20;
}
void test03()
{
Student01 *student = NULL;
Student_Init_Pointer(&student);
cout << "指针间接赋值" << student->Age << endl;
Student_Init_Reference(student);
cout << "引用赋值" << student->Age << endl;
}
😜3. 常量引用:其实就是对const引用的简称
void test04()
{
int num3 = 100;
const int& num4 = num3; //此时num4就是num3
cout << "num3=" << num3 << endl;
cout << "引用:num4=" << num4 << endl;
// num4 = 200;是错误的,const引用时不能修改的
}
void test05()
{
// int& num5 = 300;是错误的,普通引用不能赋字面量
const int& num6 = 300; //常引用可以赋字面量
cout << "引用:num6=" << num6 << endl;
}
🐱🚀注意:常引用一般使用的场景
✔常引用主要用到函数的形参中,尤其是类的拷贝/复制函数。
✔若果希望实参随形参的改变而改变,就是一般引用;反之,就是常引用。
✨总结:
- 引用是c++对c的重要扩充。
- 本质就是指针常量。
- 欢迎大家评论交流!🌹🌹🌹