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

C++指针与引用的区别详解

 C++中指针和引用都是间接操作内存的机制,但它们在语法、功能和使用场景上有显著区别。从初始化、可修改指向、空值、访问操作、内存管理、多级间接指向、sizeof等方面进行说明。

1、定义与本质

指针.

变量存储的是另一个变量的内存地址,通过解引用(*)操作符访问目标值。

int a = 10;

int *p = &a; // p存储a的地址

引用

是目标变量的别名,直接绑定到目标变量,没有独立的内存空间

int a = 10)

int &r = a, //r是a的别名

2.初始化

指针

可以不初始化(但可能成为野指针)。可以指向空值(nullptr)。

int *p1;

//未初始化(危险!)

int *p2:= nullptr;//空指针

引用

必须初始化且不可更改为绑定其他对象。不能绑定空值。

int a = 10;

int &rl = a;// 正确

// int &r2;// 错误:必须初始化

3.可修改性

指针

可以修改指向的地址。

int a = 10,b = 20:

int *p = &a;

p = &b;//修改指针指向b

引用

一旦绑定对象,无法更改。

int a= 10,b = 20;

int &r = a;

//r=b;  //实际是赋值操作:a =b

4.空值(Nullability)

指针

可以指向空值(nullptr)。

int *p = nullptr; // 合法

引用

必须绑定有效对象,不能为空

// int &r = nullptr;// 错误!

5.操作符

·指针

使用 *解引用访问目标值。

支持指针算术运算(如 ++,--)。

int arr[3]={1,2,3};

int *p = arr;

cout << *(p + 1);// 输出2(等价于arr[1])

引用

直接使用引用名访问目标值。不支持算术运算。

int a = 10;

int &r = a;

cout <<r;// 输出10

6.参数传递

指针.

传递地址,函数内需解引用修改值。

void increment(int *p){(*p)++;}

int a = 10;

increment(&a);//a变为11

引用

直接操作原变量,语法更简洁

void increment(int &r){r++;}

int a = 10;

increment(a);// a变为11

7.内存管理

指针.

可动态分配内存(new/delete)。

int *p = new int(10);

delete p;//必须手动释放内存

引用

不能直接管理动态内存,但可绑定到动态分配的对象。

int *p = new int(10);

int &r = *p;  // r绑定到*p

delete p;   //r变为悬空引用(危险!)

8.多级间接访问

指针

支持多级指针(如 int **pp)

int a = 10;

int *p = &ar

int **pp = &p; // 指向指针的指针

引用

.不支持多级引用,但可绑定到指针,

int a = 10;

int *p = &a;

int *&rp = p;// 引用绑定到指针

9.sizeof 行为

指针

返回指针本身的大小(如 4或8字节)。

int *p;

cout << sizeof(p);//输出4(32位系统)或8(64位)

引用

返回目标对象的大小。

int a = 10;

int &r = a;

cout << sizeof(r);// 输出4(假设int为4字节)

10.适用场景

指针

动态内存管理,

需要指向不同对象或空值的情况,

实现数据结构(如链表、树)。

引用

函数参数传递(避免拷贝)。。

运算符重载(如operator=)

返回值优化(链式调用)。

http://www.dtcms.com/a/614897.html

相关文章:

  • 比较高度对结构图像的影响
  • 一个账号调用N个AI模型!从LLM到视频生成的丝滑解决方案
  • 宗亲网站开发建设公益网站多少钱
  • 教育学校网站做网站开发中用到的英文单词
  • Qt源码编译记录
  • 智能招聘新范式
  • 伴奏在线制作网站做网站背景全覆盖的代码
  • 深入理解哈希表:实现 unordered_set 与 unordered_map
  • 国内大的网站建设公司asp.net网站建设论文
  • 外贸营销型网站制作公司深圳网络推广
  • 基于单片机的程控放大器设计与实现
  • linux权限的3个经典问题
  • 尚硅谷 SpringCloud05 Seata分布式事务
  • 锐旗 天梯网站建设自己做网站怎么连接外网
  • 【图像处理基石】如何从动漫参考图中提取色彩风格?
  • 建设asp网站视频教程成为网站有哪些网址?
  • MySQL:mysql中将表中数据进行删除后,多久空间会被释放出来?
  • 莱芜网站建设wordpress 引用 样式
  • v-model 原理详解
  • .net网站电商平台排行榜
  • 四川省建设厅官方网站扣分记录轮网站开发的重要性
  • Python为什么要使用可迭代对象
  • OUC AI Lab 第六章:基于卷积的注意力机制
  • 晋城市 制作网站自助建站系统免费模式
  • Docker安装unoconvert
  • 【ros2】ROS2接口定义指南
  • 网页制作免费网站建设wordpress函数表
  • 建设部房地产网站建设银行支行网站
  • 网站meta 优化建议教育技术专业网站开发课程
  • 网站开发课程的建议网页怎么搜索关键词