当前位置: 首页 > news >正文

指针与引用区别

指针是一个变量,存的是地址;引用是一个别名,本质是被引用对象本身。

本质区别

对比点指针(Pointer)引用(Reference)
本质一个变量另一个变量的别名
是否占内存有独立内存通常不单独占(编译器实现)
是否可为空可以nullptr必须绑定对象
是否可改指向可以一旦绑定不能再换
是否必须初始化可以先定义后赋值必须初始化
使用方式*p解引用直接当原变量用

语法层面对比

指针

int a = 10; int* p = &a; *p = 20; // 修改 a cout << a; // 20

特点:

p是变量

p里存的是a的地址

访问对象必须*p

引用

int a = 10; int& r = a; r = 20; // 修改 a cout << a; // 20

特点:

r不是新对象

r就是a

用法和普通变量一样

内存层面理解

指针的内存示意

int a = 10;
int* p = &a;
a: 10
p: &a

a占 4 字节

p也占 8 字节(64 位系统)

引用的内存示意

int a = 10;
int& r = a;

a (r): 10

r没有独立身份

编译器内部把r当作a

引用在汇编层面通常被优化成直接访问原变量

能不能为 null?

指针:可以

int* p = nullptr;

常用于:

表示“暂时不指向任何对象”

链表、树、可选对象

引用:不行

int& r; // ❌ 编译错误

能不能“改绑”?

指针:可以改指向

int a = 1, b = 2; int* p = &a; p = &b; // 改指向 b

引用:不能改绑

int a = 1, b = 2; int& r = a; r = b; // ❌ 不是改绑定

这行代码的含义是:

把 b 的值赋给 a

绑定关系仍然是:r -> a

函数参数中的区别

指针传参

void func(int* p) { if (p) *p = 100; } int a = 10; func(&a);

特点:

需要传地址

可能为空(要判空)

更底层、更灵活

引用传参

void func(int& x) { x = 100; } int a = 10; func(a);

特点:

语法更自然

不用判空

更安全

C++ 推荐:能用引用就用引用

什么时候用指针?什么时候用引用?

用引用的场景

函数参数

返回值(不为 null)

表达“别名关系”

不希望对象为空

用指针的场景

可能为空

需要动态内存

需要重新指向

数据结构(链表、树)

http://www.jsqmd.com/news/331641/

相关文章:

  • 世毫九|合抱之木 生于毫末,九层之台 起于累土
  • iOS 闭包 upvalue 60 上限?三招轻松解决!(大白话生动有趣版)
  • iOS 原生 SDK 概念介绍(大白话生动有趣版):framework、xcframework、.a、Info.plist、Capabilities、链接参数、隐私权限,一次讲明白
  • 小学生身体素质测评管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • Java SpringBoot+Vue3+MyBatis 失物招领平台系统源码|前后端分离+MySQL数据库
  • SpringBoot+Vue 小学生身体素质测评管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 人工智能引领搜索优化变革:从规则驱动到智能算法匹配
  • 构建AI大模型的系统工程:从基础设施到部署运维
  • 【2025最新】基于SpringBoot+Vue的华府便利店信息管理系统管理系统源码+MyBatis+MySQL
  • SpringBoot+Vue Spring boot名城小区物业管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 一代女皇武则天的另一面:出土墓志揭示的温情母亲形象
  • 解决 Linux 下 tar 解压错误:文件损坏与不完整问题的全面指南
  • 如何选择西安优质小程序开发服务与本凡码农合作?
  • 数据恢复大师课:磁盘参数错误的终极解决方案
  • manictime pro 特别版安装教程下载
  • 【2025最新】基于SpringBoot+Vue的Spring boot名城小区物业管理系统管理系统源码+MyBatis+MySQL
  • Linux网络性能优化与监控实战指南:从参数调优到请求分析
  • 推荐一个基于 Spring Boot 4.0 + Java 21 + Spring AI 2.0 的大模型项目!
  • 下载 | Win11 24H2 正式版更新!(系统ISO映像、多合一版本、26100.7705、Windows 11)
  • 2026年Q1优质的玉米种子服务商选择标准
  • 2026年初武汉东湖高新区幼儿英语兴趣班口碑盘点
  • 2026年开年,武汉武昌区小学英语机构深度解析
  • 新疆建筑防水材料实力厂商综合评估报告(2026年Q1)
  • 如何进行 Vibe Coding:从“灵感驱动”到“可交付工程”的方法论
  • Vibe Coding 与智能体:软件团队的新工作范式,以及我们该如何适应
  • 2026年杭州青少年内衣品牌选购指南与公司盘点
  • 大数据量处理
  • 2026年河南玉米良种选购指南:六家驻马店实力厂商深度解析
  • 提示工程架构师必收藏:模块化设计资源大全
  • SpringBoot+Vue 光影平台完整项目源码+SQL脚本+接口文档【Java Web毕设】