C++基础之引用(常人有误区)

来源:互联网 发布:2016下半年的网络综艺 编辑:程序博客网 时间:2024/04/30 09:57

什么是引用,在网上搜寻资料以及百度百科里介绍概念,都说是变量的别名,很多人认为的引用一直有两个误区,我们先从怎么用到认识他

使用:类型 & 变量名 = 被引用变量名

int a = 2;      int & b = a;      b = 3;    会发现a的值也是3A 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了

引用需要注意的地方:

引用声明的时候就必须初始化

引用初始化就不能再引用其他变量(想想引用和指针的区别)

数组没有引用

0 0
原创粉丝点击