C++引用:
C++中引用是一个别名,也就是说,它是已经某个已存在变量的另一个名字,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量
C++引用和指针:
引用和指针很容易混淆,但他们之间有以下区别:
1.引用不存在空引用,引用必须连接到某块合法空间
2.一旦引用被初始化为一个对象,就不能指向另一个对象
3.引用必须在创建时初始化
引用的基本语法:
1.初始化:
int i = 10;
int &a = i;//Type &别名 = 原名
//数组的引用
int arr[5] = {1,2,3,4,5};
//方式一:
int (&prArr)[5] = arr;
//方式二:
typedef int(ARRAYREF)[5];//一个具有5个元素的int类型的数组
ARRAYREF &prArr1[5] = arr;
2.参数传递:
int main() {
int a = 10;
int b = 12;
swap3(a,b);
system("pause");
return EXIT_SUCCESS;
}
void swap3(int &x, int &y) {//int &x <==>int &x = a;
int temp = y;
y = x;
x = temp;
}
注意事项:
1.必须引用一块合法的空间
2.不要返回局部变量的引用,如果返回值是引用那么函数的调用可以用作左值
本质:在C++中引用的本质就是一个指针常量
int a = 10;
int &b = a;
//编译器自动转换为 int* const b = &a;
b = 20;
//内部发现b是引用,自动转换为*b = 20
指针的引用:
void AllocatePointer(Teacher** teacher) {
*teacher = (Teacher *)malloc(sizeof(Teacher));
(*teacher)->m_age = 20;
}
void AllocateReference(Teacher*& tea) {//Teacher*& tea = teacher;
tea->m_age = 30; //Teacher** const tea = &teacher;
}
int main() {
Teacher a;
Teacher* teacher = NULL;//定义一个指向Teacher结构体类型的指针变量
teacher = &a;
Teacher** t = &teacher;//
AllocatePointer(&teacher);
cout << teacher->m_age << endl;
AllocateReference(teacher);
cout << teacher->m_age << endl;
system("pause");
return EXIT_SUCCESS;
}
常量的引用:
字面量不能赋给引用,但是可以赋给const引用
const int &re = 10;