C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?
某日小二参加XXX科技公司的C++工程师开发岗位2面:
面试官:指针、引用、解引用和取地址是C++中的重要概念,请问它们在语法和语义上有所不同?
小二:指针是一个变量,它存储了一个内存地址。
小二:引用是一个别名,它允许使用一个变量的多个名称来访问同一个内存位置。
小二:解引用是指使用*运算符来访问指针所指向的内存位置处的值。
小二:取地址是指使用&运算符来获取变量的地址。
指针是一个变量,它存储了一个内存地址。可以使用指针来访问和修改存储在该地址处的值。指针可以通过&运算符获取变量的地址,也可以通过*运算符解引用指针来访问该地址处的值。
int x = 10;
int* ptr = &x; *// 获取x的地址*
*ptr = 20; *// 修改x的值*
引用是一个别名,它允许使用一个变量的多个名称来访问同一个内存位置。引用可以看作是指针的一种简化形式,它不需要使用*运算符来解引用,也不需要使用&运算符来获取地址。
int x = 10;
int& ref = x; *// ref是x的引用*
ref = 20; *// 修改x的值*
解引用是指使用*运算符来访问指针所指向的内存位置处的值。
int x = 10;
int* ptr = &x;
int y = *ptr; *// 解引用ptr,获取x的值*
取地址是指使用&运算符来获取变量的地址。
int x = 10;
int* ptr = &x; *// 获取x的地址*
总的来说,指针和引用都可以用来访问和修改变量的值,但它们的语法和语义有所不同。指针需要使用*运算符来解引用,而引用不需要。指针可以被重新赋值指向另一个内存位置,而引用一旦绑定到一个变量上就不能再绑定到另一个变量上。解引用和取地址是指针和引用的基本操作,它们可以用来访问和修改变量的值以及传递变量的地址给函数。
面试官:非常好,那么你知道引用是怎么实现的吗?
小二:引用的底层实现的具体细节在不同编译器上可能不同,但是有一种方法就是常量指针。同样,常量指针需要在初始化的时候绑定指向的对象,而且在绑定之后不能修改绑定的对象。这和引用的行为符合。
面试官:可以对引用取地址吗?
小二:可以,取到的地址和对引用绑定的对象取到的地址相同。
面试官:那么可以对引用解引用吗? (挖坑)
小二:当然不行,虽然底层实现可能是常量指针,但它只是对象的别名,行为和对象的行为一致。
面试官:任何情况下都不行吗?
小二:不行。(蜜汁自信)
面试官:如果引用的是指针呢?(淫笑)
小二:额,那是可以的。。。(爆汗)
面试官:好的,保持通信畅通,回去等通知吧。
小二:谢谢。
那么小二2面通过的概率大概有多大?
关注我,带你21天“精通”C++!(狗头)
C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?的更多相关文章
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- 面试问题之C++语言:C++中指针和引用的区别
转载于:https://blog.csdn.net/gcc2018/article/details/82285940 1.指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用 ...
- C++ 中指针与引用的区别
指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过v ...
- 【翻译】 Windows 内核漏洞学习—空指针解引用
Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/windo ...
- Windows 内核漏洞学习—空指针解引用
原标题:Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/w ...
- C/C++函数指针详解(转)
这两天在研究C/C++的函数指针,找到一篇讲解比较详细的博客,内容有点多,但是讲解得比较详细,适合初学者.特转之: 1. 无处不见的函数指针 使用函数指针可以设计出更优雅的程序,比如设计一个集 ...
- [转载]C++中 引用&与取地址&的区别
一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用. 例如: int &rf; // 声明一个int型的引用r ...
- C++中 引用&与取地址&的区别
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- [转载]& 引用 取地址
原文地址:& 引用 取地址作者:beter 引用实际上就是给同一个变量取了多个名字. 举个例子: 有个人的名字叫a,之后又改名叫b,这时a和b都是指这个人,这样b就引用了a,即 ...
随机推荐
- .net core 自定义授权策略提供程序进行权限验证
.net core 自定义授权策略提供程序进行权限验证 在这之前先了解一下鉴权和授权的概念: 鉴权 鉴权可以说是身份验证,身份验证是确定用户身份的过程: 在ASP.NET Core 中身份验证是由身份 ...
- IDEA2022中部署Tomcat Web项目
使用工具: IDEA2022 Tomcat9.0.4 1.下载Tomcat: 官网:https://tomcat.apache.org/ 找到需要的版本下载即可,下载完成解压即可用: Tomcat目录 ...
- Python中实现单例的几种方式
Python如何实现单例? 什么是单例模式? 单例模式:一个类只能有一个实例化对象存在的模式. 如何实现单例? 1.使用模块 python中模块是天然的单例模式,当一个模块被调用时,会生成对应的.py ...
- KVM WEB管理工具 WebVirtMgr
一.webvirtmgr介绍及环境说明 温馨提示:安装KVM是需要2台都操作的,因为我们是打算将2台都设置为宿主机所有都需要安装KVM相关组件 github地址https://github.com/r ...
- [Java]排序算法>插入排序>【折半插入排序】(O(N*N)/稳定/N较大/无序/顺序存储)
1 折半插入排序 1.1 算法思想 相比于[直接插入排序]:采用"顺序查找法"查找当前记录在已排好序的序列中的插入位置, 折半插入排序利用"折半查找法"快速查出 ...
- Vue2异步更新及nextTick原理
vue 官网中是这样描述 nextTick 的 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,可以获取更新后的 DOM. 在学习 nextTick 是如何实现之前,我们 ...
- day104:MoFang:个人中心页面&flask-admin&基于faker生成仿真数据
目录 BUG:登陆跳转并解决页面卡顿现象 1.前端显示个人中心页面 2.flask-Admin构建和配置后台运营站点管理用户信息 3.基于Faker生成仿真测试数据 BUG:登陆跳转并解决页面卡顿现象 ...
- YII2.0的文件上传, 并把文件名称重新编译
/** *@Action 文件上传示例 *@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译 *@我们上传的是一个叫 photo 的jpg和png格式的文件 */ Controlle ...
- 使用Dockerfile构建容器镜像
Dockerfile官方文档: https://docs.docker.com/engine/reference/builder/ 获取容器镜像的方法 容器镜像是容器模板,通过容器镜像才能快速创建容器 ...
- MQ高级
1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消息到达exchange后未到达 ...