C++中引用和指针有什么区别?(代码说明)


引用是变量的别名,必须初始化且不可改绑;指针是存储地址的变量,可为空、可重指向、可算术运算;引用必有效无需检查,指针使用前需判空。

引用是变量的别名,指针是存储地址的变量;引用必须初始化且不能改绑,指针可为空、可重指向、可算术运算。

语法和初始化要求不同

引用在定义时必须绑定到一个已存在的对象,之后不能再绑定其他对象;指针可以先声明,后赋值,也可以为空(nullptr)。

例如:

int a = 10, b = 20;
int& ref = a;    // ✅ 合法:引用必须初始化,且绑定到a
// int& ref2;     // ❌ 错误:引用不能不初始化
// ref = b;       // ⚠️ 注意:这其实是给a赋值为20,不是让ref改绑到b!

int* ptr; // ✅ 合法:指针可以先声明 ptr = &a; // ✅ 后续赋值 ptr = &b; // ✅ 可以重新指向其他变量 ptr = nullptr; // ✅ 可以为空

空值与有效性检查

引用一旦创建就一定有效(不存在“空引用”),所以用引用前无需检查;指针可能为空或野指针,使用前通常需要判空。

立即学习“C++免费学习笔记(深入)”;

例如:

void func(int& x) {
    std::cout << x; // ✅ 安全:x一定有效
}

void func_ptr(int p) { if (p != nullptr) { // ✅ 推荐:避免解引用空指针 std::cout << p; } }

内存和操作行为差异

引用本身不占额外存储空间(编译器通常优化为直接访问原变量),而指针是一个变量,占4或8字节;指针支持算术运算(如ptr++),引用不支持。

例如:

int arr[] = {1, 2, 3};
int& r = arr[0];   // r是arr[0]的别名
// r++;             // ✅ 等价于 arr[0]++
// r += 2;          // ✅ 合法,修改arr[0]

int* p = arr; p++; // ✅ 指向arr[1] // r++; // ❌ 但r本身不能++(不是指针)

作为函数参数和返回值的典型用法

引用常用于避免拷贝、实现输出参数或重载操作符;指针更灵活,适合表示可选、动态或数组场景。

例如:

// 引用参数:避免拷贝大对象,且能修改实参
void swap_ref(int& a, int& b) {
    int t = a; a = b; b = t;
}

// 指针参数:可表示“不提供”(传nullptr) void process(int opt_data) { if (opt_data) { / 处理数据 */ } }

// 引用返回:返回局部静态或成员,安全;不能返回局部栈变量的引用 int& get_first(std::vector& v) { return v[0]; // ✅ 安全:v的生命期由调用者管理 }

// 指针返回:同样常见,但调用方需注意空值和生命周期 int find(int begin, int end, int val) { while (begin != end && begin != val) ++begin; return begin; // ✅ 可能返回end(即nullptr-like) }

基本上就这些。核心记住:引用是“另一个名字”,指针是“地址值”。选哪个,看你要不要空状态、要不要重定向、要不要算术移动——要,就用指针;只要安全、简洁地访问或修改原对象,优先用引用。


# c++  # 区别  # 指针  # 输出参数  # 对象  # 为空  # 绑定  # 要不要  # 是一个  # 也可  # 看你  # 不存在  # 不支持  # 可选  # 就用 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】  Win11如何设置电源计划_Win11电源计划优化教程【攻略】  Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】  c# 在ASP.NET Core中管理和取消后台任务  c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】  Win11怎么关闭通知中心_Windows11系统通知与专注助手设置  如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧  php订单日志怎么导出excel_php导出订单日志到表格教程【教程】  如何使用正则表达式批量替换重复的“-”模式为固定字符串  Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】  如何使用Golang编写单元测试_创建Test函数验证业务逻辑  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  Windows10任务栏图标变成白色文件_Win10重建图标缓存修复方法  Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】  Win11怎么更改管理员名字 Win11修改账户名称详细步骤【教程】  零基础学会Python自动化办公_高效处理Excel与PDF文档  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  c++ unordered_map怎么用 c++哈希表用法【教程】  电脑无法识别U盘怎么办 Windows磁盘管理与驱动更新修复识别问题【解决】  Python字符串处理进阶_切片方法解析【指导】  Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法  c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】  Mac如何与安卓手机传文件_Mac和Android设备互通【必备工具】  Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)  Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程  Win11怎么关闭自动调节亮度 Win11禁用内容自适应亮度【设置】  Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录  c++输入输出流 c++ cin与cout格式化输出【方法】  如何在 Go 结构体中正确初始化 map 字段  php中$this和::能混用吗_对象与静态作用域冲突解决【方法】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  mac怎么安装adb_MAC配置Android ADB开发环境【详解】  Win11如何设置自动关机 Win11定时关机命令使用教程【技巧】  Win11视频默认播放器怎么改_Win11关联第三方播放器【步骤】  获取 PHP 文件最后修改时间的正确方法  Win11怎么设置按流量计费_Win11限制后台流量消耗【网络】  Python邮件系统自动化教程_批量发送解析与模板应用  如何在Golang中编写端到端测试_Golang E2E测试流程示例  Win11怎么清理C盘系统日志_Win11清理系统日志文件【步骤】  PythonPandas数据分析项目教程_时间序列透视表应用  C#如何在一个XML文件中查找并替换文本内容  Win11时间怎么同步到原子钟 Win11高精度时间同步设置【指南】  Mac如何修复应用程序权限问题_Mac磁盘工具修复权限【教程】  Windows10如何更改系统字体大小_Win10辅助功能文本缩放设置  php做exe支持多线程吗_并发处理实现方式【详解】  Mac如何开启夜览模式_Mac护眼模式设置与定时  如何用正则与预处理高效拦截带干扰符的恶意域名  微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】  如何使用Golang配置安全开发环境_防止敏感信息泄露  PHP主流架构怎么部署到Docker_容器化流程【操作】 

 2026-01-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.