首页后端开发其他后端知识C++指针与引用区别和相同处有什么?

C++指针与引用区别和相同处有什么?

时间2024-03-28 23:20:03发布访客分类其他后端知识浏览944
导读:这篇文章我们来了解C++指针与引用区别和相同处,C++指针是C++中很重要的内容,而引用和指针原理很详细,很多朋友会混淆以及很多面试场景可能会考到,对此这篇就和大家一起来对比一下C++指针与引,感兴趣的朋友就继续往下看吧。 1、引用与...

这篇文章我们来了解C++指针与引用区别和相同处,C++指针是C++中很重要的内容,而引用和指针原理很详细,很多朋友会混淆以及很多面试场景可能会考到,对此这篇就和大家一起来对比一下C++指针与引,感兴趣的朋友就继续往下看吧。

1、引用与指针的区别

指针和引用的原理非常的相似,所以很多时候尤其是面试的时候经常会拿来比较。

本文来梳理一下引用和指针的一些异同。

1.1 相同点

两者都是关于地址的概念。

指针本身是一个变量,它存储的值是一块内存地址,而引用是某一个内存的别名。我们可以使用指针或引用修改对应内存的值。

1.2 区别

  • 引用必须在声明时初始化,而指针可以不用

我们无法声明一个变量引用再给它赋值,只能在声明的同时进行初始化:

int a = 3;
    
int &
    b;
      // 非法
int &
    c = a;
     // 合法

而指针没有这个限制:

int *p;
     // 合法

  • 引用只能在声明时初始化一次,之后不能指向其他值,而指针可以

引用一旦声明无法更改,但指针可以。某种程度上来说,引用类似于常量指针。

int a = 3;
    
int &
    b = a;
    
int const *p = &
    a;
    

  • 引用必须指向有效变量,指针可以为空

这是两者一个使用上巨大的区别,我们拿到一个引用可以放心地使用, 因为它一定不会为空。而指针则不然,有可能为空指针,必须要经过判断才能使用。

  • sizeof运算结果不同

sizeof函数可以计算变量内存块的大小,但如果我们对指针使用sizeof得到的是指针这个变量本身的占用内存大小,而不是指针指向的变量的内存大小。而引用则没有这个问题。

  • 有指针的引用,但是没有引用的指针

我们先来看引用的指针:

int a = 3;
    
int &
    b = a;
    
int *p = &
    b;
    

这段代码并不会报错,但如果我们真的去运行了,会发现p就是一个普通的int型指针,它指向的是变量a。因为b是一个引用,它的地址和a相同。所以我们定义一个指向b的指针,实际上就是定义指向a的指针。这也是指向引用的指针不存在的原因。

再来看看指针的引用,指针的引用是存在的,也很好理解,本质上就是指针的一个别名:

int a = 3;
    
int *p = &
    a;
    
int *&
    pt = p;
    

pt也可以指向别的变量,也可以修改解引用的值,使用上它和p没有任何区别。

除了上面说的这些之外,指针和引用还在一些细小的方面有一些差别。例如自增和自减的含义不同,指针的自增和自减代表的是指针的移动,而引用的自增自减则是变量的值发生变化。

现在大家对于C++指针与引用区别和相同处应该都清楚了吧,上述示例能帮助大家加深理解,有需要的朋友可以参考学习,希望对大家学习C++指针与引用有帮助,想要了解更多大家可以关注网络其它相关文章。

文本转载自脚本之家

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C++指针与引用区别和相同处有什么?
本文地址: https://pptw.com/jishu/655265.html
Java静态和非静态方法不同在哪?三点带你了解 C语言assert是什么函数,assert()怎样使用?

游客 回复需填写必要信息