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

九(4).存在指针的引用,不存在引用的指针

存在指针的引用不存在引用的指针

一.如何理解

1. “存在指针的引用”(Pointer to Reference)
(1) 语法与含义
  • 指针可以指向引用(即 T*&const T*&),但引用本身不能指向指针即没有 &* 这种语法)。

  • 指针的引用 是一个“对指针的别名”,修改它会影响原始指针。

2. “不存在引用的指针”(Reference to Pointer)**
(1) 语法与含义
  • C++ 没有“引用的指针”这种语法(即没有 &* 或类似的语法结构)。

  • 引用本身是别名,不能指向其他引用(引用不能重新绑定)。

  • 指针可以指向任何对象(包括引用),但引用不能指向指针。

 3.如何定义存在指针的引用
void testA()
{int a = 10;int* pa = &a;// 存在指针的引用int*& rpa = pa;cout << "*rpa = " << *rpa << endl;}testA();  // *rpa = 10}

如何定义引用的指针

void testB()
{int c = 5;int&d = c;// 不存在引用的指针int&*  rpd ;   // ERROR
}

二. “存在指针的引用”(Pointer to Reference)

(1) 语法与含义
  • 指针可以指向引用(即 T*&const T*&),但引用本身不能指向指针(即没有 &* 这种语法)。

  • 指针的引用 是一个“对指针的别名”,修改它会影响原始指针。

  • 语法

int x = 10;
int* ptr = &x;          // ptr 是指向 x 的指针
int*& ref_to_ptr = ptr; // ref_to_ptr 是 ptr 的引用(对指针的别名)
  • ref_to_ptrptr 的引用,修改 ref_to_ptr 会直接影响 ptr

(2) 实例
#include <iostream>
using namespace std;int main() {int x = 10;int* ptr = &x;          // ptr 指向 xint*& ref_to_ptr = ptr; // ref_to_ptr 是 ptr 的引用*ref_to_ptr = 20;       // 通过 ref_to_ptr 修改 x 的值cout<< x << endl;      // 输出 20(x 被修改)int y = 30;ref_to_ptr = &y;        // 通过 ref_to_ptr 修改 ptr 的指向cout << *ptr << endl;   // 输出 30(ptr 现在指向 y)
  • ref_to_ptrptr 的引用,修改 ref_to_ptr 会直接影响 ptr 的指向和内容。

(3) 关键点
  • 指针的引用是合法的,但很少直接使用(通常用普通指针或智能指针替代)。

  • 用途:

    • 需要传递指针的别名(避免拷贝指针)。

    • 在函数中修改调用者的指针(如动态内存管理)。

三. “不存在引用的指针”(Reference to Pointer)**

(1) 语法与含义
  • C++ 没有“引用的指针”这种语法(即没有 &* 或类似的语法结构)。

  • 引用本身是别名,不能指向其他引用(引用不能重新绑定)。

  • 指针可以指向任何对象(包括引用),但引用不能指向指针。

(2) 为什么不存在“引用的指针”?
  • 引用的本质:

    • 引用是变量的别名,不是独立的对象。

    • 引用一旦绑定后不能重新绑定(不能指向其他变量)。

  • 指针的本质:

    • 指针是存储地址的变量,可以指向任何对象(包括引用)。

    • 指针可以重新指向其他对象(可以“指向”引用,但无实际意义)。

(3)尝试“引用的指针”的错误示例
int x = 10;
int& ref = x;          // ref 是 x 的引用
int*& ptr_to_ref = &ref; // 错误!不能取引用的地址(&ref 是非法操作)

错误原因

  • &ref 尝试取引用的地址,但引用没有独立的内存地址(它是别名)。

  • C++ 不允许对引用取地址(&ref 是非法的)

四. 关键对比:指针的引用 vs 引用的指针

概念指针的引用 (T\*&)引用的指针(不存在)
语法合法性合法(int*& ref_to_ptr = ptr;非法(&ref 是非法操作)
用途修改指针的指向或内容无实际用途(引用不能取地址)
生命周期影响修改 ref_to_ptr 会影响 ptr无(不存在)
示例int*& ref = ptr;int*& ptr_to_ref = &ref;(错误)
http://www.lqws.cn/news/86311.html

相关文章:

  • FreeRTOS实时操作系统学习笔记
  • Python编程基础(三) | 操作列表
  • esp32关于PWM最清晰的解释
  • 6个月Python学习计划 Day 12 - 字符串处理 文件路径操作
  • `docker run`、`docker start`、`docker exec` 区别
  • 九.C++ 对引用的学习
  • (Python)列表的操作(增删改查、排序)
  • 基于C++的IOT网关和平台5:github项目ctGateway开发指南
  • 系统思考:成长与投资不足
  • 第100期 DL,多输入多输出通道
  • SpringBoot-Thymeleaf
  • 通讯录Linux的实现
  • 06.MySQL数据库操作详解
  • 云服务器无法远程连接怎么办?
  • MySQL中的字符串分割函数
  • 基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
  • 深度剖析:AI 建站的现状、局限与未来展望-AI编程建站实战系列预告优雅草卓伊凡
  • 电脑桌面便签软件哪个好?桌面好用便签备忘录推荐
  • 【C++/Linux】TinyWebServer前置知识之IP协议详解
  • linux 的devmem2 调式使用说明
  • PAT-甲级JAVA题解(更新中...)
  • 【C语言入门级教学】冒泡排序和指针数组
  • 散列表(哈希表)
  • Linux内核体系结构简析
  • 向量空间的练习题目
  • 2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序
  • 高等数学笔记 第八章——向量代数与空间解析几何2
  • FDR的定位原理
  • 使用ArcPy批量处理矢量数据
  • 《软件项目管理》第一章(概述)期末周复习总结笔记