您现在的位置是:群英 > 开发技术 > 编程语言
C++指针与引用区别和相同处有什么?
Admin发表于 2022-01-10 18:37:10893 次浏览

    这篇文章我们来了解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++指针与引用有帮助,想要了解更多大家可以关注群英网络其它相关文章。

文本转载自脚本之家

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-05-28 17:06:55 
摘要:java中创建数组的方法:声明数组名开辟空间并赋值,如【int[] arr;arr = new int[]{1,2,3, …};】。还可以在声明数组时指定元素个数,然后赋值,如【int[] arr1= new int[3];】。
2022-07-26 17:47:32 
摘要:PHP也开始搞类型声明,PHP7+增加了类型声明的特性,下面本篇文章就来带大家了解一下PHP类型声明特性,分享一下在返回类型声明踩的坑,希望对大家有所帮助!
2022-06-30 17:34:40 
摘要:Golang接收前端参数的方法:1、对于GET请求,使用request.URL.Query()方法获得参数;2、对于POST请求,使用json.NewDecoder(request.Body)创建json解析器实例来获取参数。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部