news 2026/5/2 18:44:26

C++引用与指针:核心区别与实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++引用与指针:核心区别与实战解析

一、上期回顾

OOP 三大特性收官:继承、虚函数、动态多态、抽象类、虚析构。今天攻坚引用 & 指针,把 C++ 最核心、面试最爱问的底层区别彻底啃透。


二、引用基础概念

1. 什么是引用

引用就是变量的别名,不开辟新内存,和原变量共用同一块空间。

语法:

int a = 10; int& b = a; // b 是 a 的别名

2. 核心特性

  1. 引用必须初始化,不能空置
  2. 一旦绑定,不能改指向
  3. 引用本身无独立内存地址
  4. 只能绑定同类型变量

三、引用最简演示

#include <iostream> using namespace std; int main() { int a = 10; int& b = a; b = 20; cout << a << endl; // 20,改别名就是改原变量 return 10; }

四、引用做函数参数(最常用)

1. 值传递:形参是副本,修改不影响实参

void swapVal(int x, int y) { int t = x; x = y; y = t; }

2. 指针传递:靠地址间接修改

void swapPtr(int* x, int* y) { int t = *x; *x = *y; *y = t; }

3. 引用传递:直接别名修改,写法干净

void swapRef(int& x, int& y) { int t = x; x = y; y = t; }

工程开发优先用引用:简洁、安全、不用解引用。


五、引用做返回值

可以返回引用,可以作为左值被赋值

int& test(int& a) { return a; } int main() { int x = 10; test(x) = 100; // x 变成 100 return 0; }

禁忌:不要返回局部变量引用,局部变量出作用域销毁,引用悬空。


六、指针与引用底层五大区别(面试必背)

表格

对比维度指针 Pointer引用 Reference
内存空间独立开辟内存,存地址无独立内存,别名共用空间
初始化可不初始化,可置 NULL必须初始化,不可为空
更改指向可以随时改指向别的变量一旦绑定,不可更改指向
使用方式需要*解引用、->访问成员直接用,像普通变量
层级支持多级指针int**不支持多级引用

一句话总结:引用是受限的指针,更安全、更简洁;指针更灵活、可空、可改指向。


七、const 修饰指针与引用(高频坑点)

1. const 修饰普通变量

const int a = 10; // a = 20; 报错,只读

2. const 指针三种写法

  1. 常量指针:指向的值不可改
const int* p;
  1. 指针常量:指针本身地址不可改
int* const p;
  1. 双 const:地址、值都不可改
const int* const p;

3. const 引用

常用在函数形参,防止修改原数据:

void show(const int& a) { // a = 100; 报错 }

八、内存模型通俗理解

  • 指针:单独一块内存,存另一个变量的地址,像 “门牌号”
  • 引用:没有门牌号,直接给原房子再起一个名字,共用同一套房

九、今日核心总结

  1. 引用是变量别名,无独立内存,必须初始化、不可改绑定
  2. 函数传参:值传副本、指针传地址、引用传别名(最优)
  3. 引用可做返回值,禁止返回局部变量引用
  4. 指针灵活可空、可改指向;引用安全简洁不可空
  5. const 修饰区分:常量指针、指针常量、常引用

十、课后练习

  1. 分别用 值传递、指针传递、引用传递 实现两数交换
  2. 写出const int*int* const的区别并代码验证
  3. 尝试返回局部变量引用,观察警告 / 崩溃
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 18:43:24

如何快速掌握暗黑2存档编辑:专业工具完全指南

如何快速掌握暗黑2存档编辑&#xff1a;专业工具完全指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2存档编辑器&#xff08;d2s-editor&#xff09;是一款基于Web技术的专业开源工具&#xff0c;专为《暗黑破坏…

作者头像 李华
网站建设 2026/5/2 18:43:00

抖音内容管理终极方案:开源下载器实现批量无水印下载

抖音内容管理终极方案&#xff1a;开源下载器实现批量无水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…

作者头像 李华
网站建设 2026/5/2 18:41:35

基于双向消息传递和Speex的水声语音通信叠加训练方案【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;查看文章底部二维码&#xff08;1&#xff09;叠加训练序列与双向消息传递信道估计算法&#xff…

作者头像 李华
网站建设 2026/5/2 18:37:25

3个步骤解决电脑风扇噪音:FanControl精准控制完全指南

3个步骤解决电脑风扇噪音&#xff1a;FanControl精准控制完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…

作者头像 李华
网站建设 2026/5/2 18:35:03

Audiveris光学音乐识别:5步实现乐谱数字化的开源解决方案

Audiveris光学音乐识别&#xff1a;5步实现乐谱数字化的开源解决方案 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 你是否曾面对堆积如山的纸质乐谱&#xff0c;渴望将它们转化为可编…

作者头像 李华
网站建设 2026/5/2 18:33:56

从零构建个人开发者工具箱:Shell脚本实现一键环境部署

1. 项目概述&#xff1a;从零构建一个个人开发者工具箱最近在整理自己的开发环境&#xff0c;发现一个挺有意思的现象&#xff1a;很多资深程序员&#xff0c;包括我自己&#xff0c;电脑里都有一套零零散散、不成体系的脚本、配置和工具。这些东西平时用起来挺顺手&#xff0c…

作者头像 李华