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

九(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.xdnf.cn/news/10675.html

相关文章:

  • uniapp-商城-77-shop(8.2-商品列表,地址信息添加,级联选择器picker)
  • window ollama部署模型
  • 2025年主流编程语言全面分析与学习指南
  • 【MySQL】使用C语言连接数据库
  • Linux内核体系结构简析
  • 长尾关键词布局与SEO实战策略
  • PythonWeb项目开发脚手架
  • String和StringBuilder和StringBuffer
  • NodeJS全栈WEB3面试题——P3Web3.js / Ethers.js 使用
  • android binder(四)binder驱动详解
  • 【Block总结】LRSA,局部区域自注意力|即插即用
  • 有sudo权限下/无sudo权限下:切换gcc、g++版本
  • ipfs下载和安装(windows)
  • FastAPI+Pyomo实现线性回归解决饮食问题
  • 第十七章 数据集成
  • MySQL主从复制深度解析:原理、架构与实战部署指南
  • CodeTop100 Day20
  • 树欲静而风不止,子欲养而亲不待
  • 【Go语言】Ebiten游戏库开发者文档 (v2.8.8)
  • javaEE->IO:
  • tortoisegit 使用rebase修改历史提交
  • 计算机组成原理——CPU的功能和基本结构
  • 【Doris基础】Apache Doris中的Version概念解析:深入理解数据版本管理机制
  • postman工具使用
  • 鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)
  • Java线程同步与内存模型详解
  • react与vue的渲染原理
  • 第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列
  • css使用scoped之后样式失效问题
  • Day43打卡(补41+42) @浙大疏锦行