引用
一 引用的定义
引用可以看作一个已定义变量的别名
引用的语法:Type& name = var;
// 引用的定义
int a = 10;
int& b = a;
cout << "a:" << a << " a的地址: " << &a << endl;
cout << "b:" << b << " b的地址: " << &b << endl;
二 引用的意义
- 引用作为其它变量的别名而存在,因此在一些场合可以代替指针
- 引用相对于指针来说具有更好的可读性和实用性
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
三 引用的本质
引用在C++中的内部实现是一个常指针, 因此引用所占用的空间大 小与指针相同
Type& name ---- Type* const name
int a = 0;
int &b = a; // int* const b= &a; b的指向不能变
当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地 址,传给了形参引用(常量指针)
void func(int &var)
{
var = 15;
}
void func(int *const var)
{
*var = 15;
}
int main()
{
int value= 10;
func(value);
}
四 指针引用
//指针引用
int x = 666;
int *p = &x;
int* &q = p; //定义指针变量的引用
printf("*p: %d *q: %d\n", *p, *q);
#include <iostream>
using namespace std;
void boyHome1(int** meipo)
{
static int boy = 23;
*meipo = &boy;
}
void boyHome2(int*& meipo)
{
static int boy = 23;
meipo = &boy;
}
int main()
{
int* meipo = NULL;
boyHome1(&meipo);
boyHome2(meipo);
return 0;
}
五 常引用
语法: const Type& name = var;
const 引用让变量拥有只读属性
//1.用变量初始化常引用
int a = 10;
const int &b = a;
//2.用字面量初始化常量引用
const int c1 = 10;
const int &c2 = 10; //这个是在 C++中,编译器会对这样的定义的引用分 配内存,这算是一个特例
int c3 = c2;
//c2 = 100;//不能修改
const int& e 相当于 const int* const e
普通引用 相当于 int *const e1
当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值分配空间, 并将引用名作为这段空间的别名
使用字面量对const引用初始化后,将生成一个只读变量