今天就来讲讲引用,那什么是引用呢?引用就相当于普通变量的别名,就好像我们在学校有正经的读书名,在家又被叫做老三,啊四……
代码如下:
//方式1 使用指针
void swap1(int* a, int* b) {
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
//方式2 使用引用 引用作为函数的参数,不需要进行初始化
void swap2(int& a, int& b) {
//int &a; -->不行
int tmp;
tmp = a;
a = b;
b = tmp;
}
int a = 666;
int& b = a;
float c = 10.2;
float& d = c;
//1.不能直接定义没有指向的别名
//int& e;
printf_s("a: %d b: %d\n", a, b);
b = 888;
printf_s("a: %d b: %d\n", a, b);
printf_s("a的地址: 0x%p b的地址: 0x%p\n", &a, &b);//0x5264ACDB
引用的定义,在普通变量名前加上取地址符&,为普通变量 int a = 666;, 取一个别名(引用)就是 int& b = a;,这个引用别名是b,指向普通变量a。
使用引用,不能直接定义没有指向的别名如前面的 int& e; ,这是编译器不支持的。
我们对 a和b 的值和地址进行打印,发现值都是666,地址都是0x5264ACDB,这有点像什么?什么?指针。对,引用的本质就是指针,和普通指针一样也有自己的空间,保存的也是地址 ,到引用只能在C++编译器中使用。
不知道的还以为讲到别的东西了,还以为指针我唠叨完了呢,哈哈哈~~
int a = 666;
int& b = a;
b = 100;//可以对别名进行值修改
int x = 100;
int y = 10;
//swap1(&x, &y);
//printf_s("x:%d y=%d\n",x, y);
swap2(x, y);
printf_s("x:%d y=%d\n", x, y);
前面有俩个函数,功能是交换俩个数值,调用swap1用传入指针实现,就不过多赘述,swap2传入的参数是引用,引用作为函数参数时不能进行初始化(有所指向),这个指针是非常相似的,这也能达到同样效果。
既然是用指针实现的,为什么不直接使用指针,这不是多此一举吗?
1.引用作为其他变量的别名而存在,因此在一些场合可以代替指针
2.引用相对于指针来说具有更好的可读性和使用性。
它不像指针那样绕来绕去,是不是更人性化啦~
如果喜欢我,可以来我公众号“笔木追海”,等你哦~
早ノ~