首页 > 编程语言 >C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?

C++面试八股文:C++中指针、引用、解引用和取地址有什么不同?

时间:2023-06-08 23:44:14浏览次数:45  
标签:八股文 int C++ 运算符 地址 引用 指针

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的地址*  

总的来说,指针和引用都可以用来访问和修改变量的值,但它们的语法和语义有所不同。指针需要使用*运算符来解引用,而引用不需要。指针可以被重新赋值指向另一个内存位置,而引用一旦绑定到一个变量上就不能再绑定到另一个变量上。解引用和取地址是指针和引用的基本操作,它们可以用来访问和修改变量的值以及传递变量的地址给函数。

面试官:非常好,那么你知道引用是怎么实现的吗?

小二:引用的底层实现的具体细节在不同编译器上可能不同,但是有一种方法就是常量指针。同样,常量指针需要在初始化的时候绑定指向的对象,而且在绑定之后不能修改绑定的对象。这和引用的行为符合。

面试官:可以对引用取地址吗?

小二:可以,取到的地址和对引用绑定的对象取到的地址相同。

面试官:那么可以对引用解引用吗? (挖坑)

小二:当然不行,虽然底层实现可能是常量指针,但它只是对象的别名,行为和对象的行为一致。

面试官:任何情况下都不行吗?

小二:不行。(蜜汁自信)

面试官:如果引用的是指针呢?(淫笑)

小二:额,那是可以的。。。(爆汗)

面试官:好的,保持通信畅通,回去等通知吧。

小二:谢谢。

标签:八股文,int,C++,运算符,地址,引用,指针
From: https://www.cnblogs.com/bujidao1128/p/17467998.html

相关文章

  • C++面试八股文:C++中,设计一个类要注意哪些东西?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第9面:面试官:C++中,设计一个类要注意哪些东西?二师兄:设计一个类主要考虑以下几个方面:1.面向对象的封装、继承及多态。2.bigthree或者bigfive。3.运算符和函数重载、静态成员、友元、异常处理等相关问题。面试官:请介绍一下面向对象......
  • gprc python调用c++远程服务
      客户端和服务端之间不是直接通信的,需要通过生成的代码和protocolbuffers传输协议(可使用其他传输协议替换)进行通信。开发步骤:  1..proto文件----message和servicemessage是消息类型,定义参数,service是接口类型,定义远程服务的方法在grpc中有四种类型的服务方法:参考......
  • 【web 开发】PHP 特殊的对象引用之 "$this"
    前言前面我们介绍了面向对象相关的内容,我们了解到访问对象的成员必须通过对象的引用来完成.如果在对象的内部,在对象的成员方法中访问自己对象中的成员属性,或者访问自己对象内其他成员方法时怎么处理呢?答案只有一个,不管是在对象的外部还是在对象内部,访问对象中的成员都必须使......
  • android中c/c++程序的调试(eclipse)
     1.          使用gdbserver调试使用JDWP只能调试java层面的程序,如果想调试C层面的代码,需要使用gdbserver方式,gdbserver的服务端和客户端都包含在android的源码中。server端是out/target/product/xxxxxx/system/bin/gdbserver。client端是p......
  • C++模板
    模板分为函数模板和类模板函数模板模板的语法建立一个通用函数,其函数返回值类型和形参类型可以不具体制定1template<typenameT>2voidmySwap(T&a,T&b){3Ttemp=a;4a=b;5b=temp;6}7intmain(){8inta=10;9intb......
  • 检测到包降级: System.Diagnostics.Debug 从 4.3.0 降级到 4.0.11。直接从项目引用包
    .net 项目在发版的时候报包的版本不一致严重性代码说明项目文件行禁止显示状态错误错误形式的警告:检测到包降级:System.Diagnostics.Debug从4.3.0降级到4.0.11。直接从项目引用包以选择不同版本。ProjectName->Microsoft.AspNetCore.Mvc.Core2.2.5->Micros......
  • [第五届蓝桥杯省赛C++B组]省赛全题目题解
    文章目录快速分支通道酒精与饮料切面条李白打酒史丰收运算打印图形奇怪的分式六角填数蚂蚁感冒地宫取宝小朋友排队1.题目啤酒和饮料算法标签:枚举题目描述:题目答案:题目思路:题目代码:2.题目切面条来源:第五届蓝桥杯省赛C++B组算法标签递推题目描述:题目答案:题目思路:题目代码:3.题目......
  • [第七届蓝桥杯省赛C++B组]省赛全题目题解
    文章目录快速分支通道煤球数目生日蜡烛凑算式快速排序抽签方格填数剪邮票四平方和交换瓶子最大比例煤球数目题目来源:第七届蓝桥杯省赛C++B组算法标签:递推题目描述:题目答案:题目思路:题目代码生日蜡烛题目来源:第七届蓝桥杯省赛C++B组算法标签:枚举,双指针题目描述:题目答案:题目思路:题目代......
  • 在c++ 中 , | 按位或运算符的实际运用场景, 按位或&
              ......
  • 一个RSA的C++封装
    使用RSA的难点:公钥和私钥的保存与加载。在很多的场合下,密钥是以文件的形式分开保存的,对程序员使用者来说,需要解决公钥和私钥的生成、保存、加载问题。加解密过程中的分组问题。RSA加解密的开销很大,比DES和AES高2个数量级,一般情况下不适合用来对较长的数据进行加解密。但是,RSA......