什么是引用,在网上搜寻资料以及百度百科里介绍概念,都说是变量的别名,很多人认为的引用一直有两个误区,我们先从怎么用到认识他
使用:类型 & 变量名 = 被引用变量名
int a = 2; int & b = a; b = 3; 会发现a的值也是3
A a; a.data = 2; A & b = a; b.data = 3; 会发现a.data的值也是3,A是结构体
char *p = "123"; char & t = *p; 会发现&t也是指向字符串“123”
上面三行代码的结果就是引用的作用
误区一:引用是其他变量的别名
---------摘自百度百科
------摘自他人的博客
误区一就是很多资料和大家口口相传的引用就是其他变量的别名
误区二:引用是不占内存的
--------摘自上面那个人的博客
--------------摘自另一个人的博客
解析:我为什么说他们说的是错误的
int a = 2;
int & b = a;
这两行我们简单的看一下内存
图1是取a的内存看的
图2是将图1往上拉了一下
通过这两幅图来解析为什么我说大上面两处是误区,图1是a的内存,地址是0x002AF75C,里面存的是2,2是00 00 00 02,但因为我们是小段内存(低在低,高在高,00 00 00 02,内存里面75C、783、7AA,从上到下是低到高,从左到右是低到高,所以低在低,低位存低地址),存的是倒过来的 02 00 00 00,也看得出来
这时候我们看图2,看到第一行靠后有个5c f7 2a 00,把这个顺序过来,是 00 2a f7 5c,这不就是a的地址吗,这是debug模式看到的,如果是release的话,图2最后面四个字节就是这个(debug模式下加了些东西),这里就是b,b是有内存的,存的是a的地址,所以他是有自己独立的空间,不是其他人的别名
如果你在内存里直接取b的地址,取到的就是a的地址,因为内部机制解引用,这些不用我们考虑,我们知道是什么样的,会用就行
引用的使用:”
可以当返回值,主要还是用于传参
a= 2,将a当参数传进去不管怎么操作a,函数退出a还是2,将a引用当参数传入,a在函数里赋值为1,退出函数,a的值就是1了
引用需要注意的地方:
引用声明的时候就必须初始化
引用初始化就不能再引用其他变量(想想引用和指针的区别)
数组没有引用