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

Posted bujidao1128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++面试八股文: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的地址*  

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

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

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

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

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

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

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

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

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

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

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

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

小二:谢谢。

C++中如何区分引用和取地址符号&?

引用是在写函数定义的时候用,调用的时候直接写,没有取地址符&,
指针是在函数定义的时候用*,调用的时候用取地址符号&,例如:

void funcA(int& a,int& b)//这是引用

  //TODO

 
void funcB(int* input)//这是要用取地址

  //TODO

 
int main()

    int a = 1;
    int b = 2;
    funcA(a, b);//引用,调用函数的时候不需要取地址符
     
    int c = 3;
    funcB(&c);//取地址,调用函数的时候,因为函数要求输入为指针,因此要取地址
    return 1;

参考文章:如何区分c++中的引用和取地址

以上是关于C++面试八股文:C++中指针引用解引用和取地址有什么不同?的主要内容,如果未能解决你的问题,请参考以下文章

C++温故补缺:引用类型

解引用指针并存储对指向数据的引用,然后获取引用地址并对其执行指针运算。 C++

c语言解引用和取地址操作符?

C++指针和引用的区别

C++指针和引用的区别

C++原生指针,引用与智能指针