你不知道的事 之 C++ 指针和引用“是什么鬼”

来源:互联网 发布:产品经理面试题目知乎 编辑:程序博客网 时间:2024/04/28 00:05

微信公众号CodingRush,分享编程、算法、机器学习、数据挖掘、推荐系统、大数据计算框架等知识,欢迎扫码关注。


指针,简单的说就是在一个变量中存放地址值,那么这个变量就是指针;引用,就是给内存地址一个别名,当然这个内存地址之前已经被取过名字了。

指针大小,和机器的寻址线数相关,也和操作系统相关;比如说如果你的机器是64位机,但是你装的系统是32位系统,那么你的指针变量的大小应该还是4byte吧?没有验证过,只是猜想,有同学验证过,欢迎讨论。

引用大小,和其引用的变量相关,其实你就把引用当成正常的变量使用就对了,只不过这个引用变量和另外一个变量都是同一块内存的名字罢了。

区别:

指针,可以被修改,也就是一个指针变量内部存的指针地址可以被修改为其他的地址值。而引用指正在初始化的时候引用到另外一块内存,之后就改变不了了,这个改变不了是指你不能把这个引用引用到另外的一块内存去了,你在程序里面试试这样修改就知道为什么做不到了。

const int* a; 常量指针,说明这个指针指向一个常量的地址,这个指针指向的内存空间的值不能修改哦。

int* const b; 指针常量,说明这个指针变量不能被修改了,也就是说你不能把这个指针变量重新赋值哦,你不能让他指向别的内存地址了哦。

const int& c; 常量引用,这个别名是给一个常量所在内存块取得哦,你就不能改变这个内存块的内容了哦。

int& const d; 引用常量,这个本身不存在哦,在程序里面这样写通过不了编译哦。因为引用本身就是作为另一块内存的别名了,也做不到的哦。

引用的本质

简单来说,C++内部引用的实现是借助了指针,比如说我们生命一个引用int &x = y,那么这个时候x中存放的是y的地址,我们在对x进行操作的时候,编译器默认转换成了(*p)的方式直接访问y所在的内存块。是这样吗?有待商榷呀?求教哪里有说明引用的机制。。。

就这么一些了呢,比起别人写了一大堆,这个还算简洁了吧。。。

0 0
原创粉丝点击