c++中的地址、指针和引用的区别 c++底层概念辨析【核心】

发布时间 - 2025-12-26 00:00:00    点击率:
地址是内存字节的编号,指针是存储地址的变量,引用是已有变量的别名;三者本质不同但均支持间接访问:地址为硬件编号(如0x7fff5fbff6ac),非C++类型;指针是真实类型(如int*),可空、可重赋值、支持算术运算;引用是绑定即固定的别名,不占内存,不可重绑、无空引用。

地址是内存中某个字节的编号,指针是存储地址的变量,引用是已有变量的别名——三者本质不同,但都服务于间接访问。

地址:内存的“门牌号”

地址是硬件层面的概念,表示内存单元的唯一编号(如 0x7fff5fbff6ac)。它不是 C++ 的数据类型,不能直接声明或赋值,只能通过取址运算符 & 获取,或由编译器/运行时系统分配。你无法定义一个叫 “address” 的变量来存地址——除非用指针或整数(如 uintptr_t)去承载它。

指针:能存地址、能改指向、能为空的“地址容器”

指针是一个真实的数据类型(如 int*),它在内存中占固定空间(通常 8 字节),内容是某个变量的地址。

  • 可被初始化为 nullptr 或其他有效地址
  • 可以重新赋值,改变指向(p = &b;
  • 支持算术运算(p + 1 指向下一个同类型元素)
  • 解引用(*p)访问目标值,可能引发空指针或野指针崩溃
  • 有独立生命周期,可作为函数参数、返回值、数组元素等自由传递

引用:绑定即固定、不可重绑、必有对象的“别名”

引用(int& r = a;)不是对象,不占额外内存(通常由编译器优化为直接使用原变量地址),它是已有变量的另一个名字。

  • 必须在定义时初始化,且只能绑定一次
  • 不能绑定到字面量或临时对象(除非是 const 引用)
  • 没有空引用的概念,不存在“未初始化引用”
  • 不能取引用的地址(&r 实际上是取 a 的地址)
  • 函数参数中用引用可避免拷贝,且允许修改实参(非 const 引用)

底层关键差异速查

指针是实体,引用是别名;地址是数值,指针是持有该数值的变量。

  • sizeof(int&) == sizeof(int),而 sizeof(int*) 是指针大小(通常 8)
  • 引用在汇编层常被完全优化掉,指针一定对应一条内存加载指令
  • 指针可构成多级(int**),引用不能“引用引用”,但可有引用的引用(即 int& & 等价于 int&
  • const int& 可绑定临时量(如函数返回值),int* 则需显式取址,且不能指向纯右值


# 字节  # c++  # 区别  # 数据类型  # 运算符  # const  # int  # 指针  # 实参  # 空指针  # 对象  # 绑定  # 已有  # 不占  # 返回值  # 是一个  # 它是  # 不存在  # 或其他  # 它在  # 一个叫 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在橙子建站中快速调整背景颜色?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  详解阿里云nginx服务器多站点的配置  如何确保西部建站助手FTP传输的安全性?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  微信推文制作网站有哪些,怎么做微信推文,急?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  python中快速进行多个字符替换的方法小结  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何用花生壳三步快速搭建专属网站?  Laravel中的Facade(门面)到底是什么原理  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何用免费手机建站系统零基础打造专业网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何挑选优质建站一级代理提升网站排名?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  JavaScript如何实现路由_前端路由原理是什么  EditPlus中的正则表达式实战(5)  无锡营销型网站制作公司,无锡网选车牌流程?  如何批量查询域名的建站时间记录?  Python面向对象测试方法_mock解析【教程】  Laravel如何处理表单验证?(Requests代码示例)  使用C语言编写圣诞表白程序  html如何与html链接_实现多个HTML页面互相链接【互相】  网站建设保证美观性,需要考虑的几点问题!  浅谈redis在项目中的应用  详解Android中Activity的四大启动模式实验简述  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Laravel如何生成API文档?(Swagger/OpenAPI教程)  如何快速查询域名建站关键信息?  JS实现鼠标移上去显示图片或微信二维码  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Java遍历集合的三种方式  详解MySQL数据库的安装与密码配置  如何在腾讯云服务器快速搭建个人网站?  如何在阿里云高效完成企业建站全流程?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布