c++中指针和引用的思考
来源:互联网 发布:ng-bind. 数组 编辑:程序博客网 时间:2024/06/08 18:58
从宏观上来讲:指针是C++的一种内置数据类型,有自己的存储地址,而引用不是一种数据类型它只是变量的别名。
至于值指针和引用的其他区别,都必须从编译器对引用的实现来讲:
从引用的定义
Int a = 5; int&j = a;
上面是一个简单的引用的定义,现在大部分编译器都是用指针来实现的,上述代码编译器会转化成如下:
Int a = 5; int *const j = &a;
从上述引用的定义可以看出引用和指针有两个区别:
1 引用必须进行初始化,因为引用是一个const指针;
2 引用无法绑定到一个空值上,因为无法对一个空值取地址(空值是右值);
从引用的使用:
j = 4;
因为j在编译器看来是一个const指针,因此编译器代码会转会为:
(*j) = 4;
从这里可以看出,对引用的任何操作都会作用在引用绑定的变量上。所以很多人提到的一些区别,比如使用sizeof,++。这是因为两者在使用时有本质的区别,一个是对指针的操作,一个是对引用绑定的绑定的变量的操作。
最后特意说一下,有的还提到引用是不占用内存。从上述的编译器引用的实现代码来看,引用的是占用的内存的因为定义了一个const指针,而这个指针是需要内存的。但是这个const指针并不是必须。
比如上述代码,int a = 5; int &j = a;j =4;与int a = 5; a =4;效果是一样的。所以可以通过编译器的优化,节省这个内存。这个完全取决于编译器的实现。ISO中并未规定引用需不需要占用内用。
总而言之,引用与直接使用变量相比,实现了一种形式上的方便,特别是在参数传递时,我们可以把引用传递理解为传递的是引用绑定的变量本身,而值传递传递的是参数的复制。
- c++中指针和引用的思考
- 关于指针和引用的思考
- c的指针*和引用&
- c中头文件在cpp文件中引用和.h文件引用的思考
- [C++] 引用和指向指针的引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- C语言中结构体指针的定义和引用
- c语言中变量的引用传递和指针
- C/C++中指针和引用
- C/C++中指针和引用
- RS开发中的一些小技巧[不定期更新]
- SSIS包部署错误之运行环境设置
- Keyboard 输入框与软键盘联动
- Cognos访问权限之让拒绝更友善
- Android布局
- c++中指针和引用的思考
- RS错误RSV-VAL-0032之项目未在布局中引用的3种解决办法
- FrameWork逆向工程之MotioPI
- Android7.0&8.0 Power Menu 添加截屏选项
- Sqlserver存储过程生成日期维度
- IE11与Cognos怪谈
- Win10系统下面的TR1008解决方案
- 新手学习 mavan 和 springboot 视频地址
- Win10系统下软件UI显示不完整解决方案