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,即 ...
随机推荐
- Node.js中理解asyncmap函数 ,爬取王者荣耀荣耀官网壁纸400多张
async/mapLimit函数理解 const phantom = require('phantom') const express = require('express'); const app ...
- LeeCode 433 最小基因变化
LeeCode 433 最小基因变化 题目描述: 基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 'A'.'C'.'G' 和 'T' 之一. 假设我们需要调查从基因序列 start ...
- LeeCode 713 乘积小于k的子数组
LeeCode 713 题目描述: 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目. 标签: 双指针.滑动窗口 建立模型 枚举子数组的右端 ...
- 中国省市区--地区SQL表
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for rc_district -- ---- ...
- 【踩坑】.NET异步方法不标记async,Task<int> 返回值 return default问题
在.NET中,返回类型为 Task<T> 的方法并不一定要标记为 async.这是因为 async 关键字只是用来告诉编译器该方法中包含异步操作,并且可以使用 await 和其他异步特 ...
- YOLO3论文中文版
文章目录 YOLO3论文中文版 摘要 1.引言 2. 解决方案 2.1 边界框预测 2.2 类预测 2.3 多尺度预测 2.4 特征提取器 2.5 训练 3.我们的做法 4. 失败的尝试 5.这一切意 ...
- [Opencv-C++] 3. opencv数据类型
文章目录 Point类 cv::Scalar类 size类 cv::Rect类 cv::RotatedRect类 固定矩阵类 固定向量类 复数类 工具函数 模板结构 Point类 在大多数程序中,Po ...
- 深度学习-09(目标检测:Object Detection)
文章目录 目标检测(Object Detection) 一 .基本概念 1. 什么是目标检测 2. 目标检测的核心问题 3. 目标检测算法分类 4. 目标检测应用 目标检测原理 1.候选区域产生 1 ...
- Python-pprint的简单使用
Data pretty printer 一.简介 print()和pprint()都是python的打印模块,功能基本一样,唯一的区别就是pprint()模块打印出来的数据结构 ...
- ABC267G Increasing K Times 题解
做这道题,很有感悟,发篇文. 先给数列从小到大排个序. 接下来设 \(f_{i,j}\) 表示前 \(i\) 个数的排列形成 \(j\) 个上坡的方案数. 接下来考虑转移,分为插入第 \(i\) 个数 ...