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了
引用需要注意的地方:
引用声明的时候就必须初始化
引用初始化就不能再引用其他变量(想想引用和指针的区别)
数组没有引用
- C++基础之引用(常人有误区)
- C/C++基础之解答C/C++常见误区
- C/C++基础之解答C/C++常见误区
- c/c++之误区
- objective-c基础之引用计数
- C/C++语言误区之:fflush(stdin)
- objective-c基础语法学习之--(6)内存管理经典问题:循环引用
- [乐意黎转载]残疾人与常人究竟有哪些区别
- C/C++语言误区之:fflush(stdin)
- C/C++语言误区之:void main( )
- C/C++语言误区之:void main()
- c / c++ 误区之二 fflush(stdin)
- C/C++语言误区之:void main( )
- C/C++语言误区之:void main( )
- C/C++语言误区之:fflush(stdin)
- C/C++ 面试题之新手误区
- C/C++文件之eof()误区
- C++ 误区之 cout<<toupper(c)
- leetcode-Reverse Words in a String
- Android 利用seekbar结合AudioManager调节系统音量
- MyBatis映射文件的resultMap如何做表关联
- FOJ2166 inversion
- Ubuntu 14.04 创建无线接入点供移动设备连接上网
- C++基础之引用(常人有误区)
- 关于lua coroutine
- php删除数组指定元素
- 关于Highcharts图表组件动态修改属性的方法(API)总结之Axis
- qq 能上但是打不开网页
- Java中对日期的注意点
- nio中selectkey,selector的作用
- 参考 网站
- You have not concluded your merge. (MERGE_HEAD exists)。