当前位置: 首页 > 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;(错误)

相关文章:

  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)
  • ubuntu 添加应用到启动菜单
  • CppCon 2014 学习:Hardening Your Code
  • 【Python 进阶2】抽象方法和实例调用方法
  • FDR的定位原理
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • PID项目-记事本不显示下划线
  • 《软件项目管理》第二章(项目准备与启动)期末周复习总结笔记
  • 九(2).参数类型为引用结构体类型
  • ROS机器人和NPU的往事和新知-250602
  • PCA(K-L变换)人脸识别(python实现)
  • 用Python开启游戏开发之旅
  • 抠图P图秀v7.8.19
  • Mysql水平分表(基于Mycat)及常用分片规则
  • 学到新的日志方法mp
  • C语言基础(10)【二维数组 字符数组 字符串相关操作】
  • CangjieMagic 智能体框架嵌入式系统实测:以树莓派 4B 为例
  • 探秘Transformer系列之(35)--- 大模型量化基础
  • Linux学习笔记:shell脚本篇(1)
  • 网站 报价方案/网络营销企业有哪些公司
  • 网上宿迁官方网站/百度客服人工服务电话
  • 设计师图片素材网站有哪些/百度搜索风云榜官网
  • 网站的论坛怎么做的/求几个微信推广平台
  • 深圳做网站报价/百度关键词优化策略
  • 动态网站设计选题参考/西安网站设计