你不知道的事 之 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所在的内存块。是这样吗?有待商榷呀?求教哪里有说明引用的机制。。。
就这么一些了呢,比起别人写了一大堆,这个还算简洁了吧。。。
- 你不知道的事 之 C++ 指针和引用“是什么鬼”
- 关于C语言你不知道的事(1)–指针和数组的区别
- 你不知道的指针和字符串
- 【C解析之五】函数:你不知道的事
- c++::模板你不知道的事~
- C语言中你不知道的事(3)-- 函数指针、指针数组及数组指针
- 你不知道的&&和||
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 你所不知道的C和C++运行库
- 指针和引用究竟是什么鬼?
- C语言编程之你不知道的事——回调函数
- C语言你不知道的事(2)typedef和#define的区别
- 《你不知道的js》------1.作用域是什么
- Linux下同时变更时间和日期的方法
- 简单工厂和工厂方法
- unity射击游戏:超萌射手(3)怪物生成和射击逻辑
- 通过日期计算距离当前时间的距离
- js绑定滚动事件,滚动事件无效,没有触发
- 你不知道的事 之 C++ 指针和引用“是什么鬼”
- DataTable导出Excel
- 几种客户端连接 PostgreSQL 不输入密码的方法
- LeetCode--Multiply Strings
- QUnit在浏览器扩展API测试中的应用
- Jquery.datatables 学习笔记
- 规避丑陋的eval
- 为什么我的线程数越多计算时间反而慢了呢
- sqlplus 中查看oracle触发器的 dbms_output.put_line 输出值