IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ 指针和引用的区别 -> 正文阅读

[C++知识库]c++ 指针和引用的区别

最近在看《c++语言的设计与演化》,对指针和引用有了全新的理解,决定写一篇博客记录一下。
指针很好理解,它本身拥有一个地址,地址中存着的是它指向的对象的地址。

int a = 3;
int* ptr = &a;

对于上面所定义变量a和指针ptr,ptr位于地址add1中,add1中存储的是a的地址。

引用是什么?简单的说,引用是别名,也就是其所指对象的第二名称,对引用的修改也就是对其引用对象的修改,从这意义上说,引用和指针很像(实际上对于很多编译器来说引用和指针的汇编是一样的!)。
那么为什么需要引入引用?或者说,引用和指针的区别有哪些?
我们知道,对于一个函数传参来说,一般来说有值传递和指针传递两种。

void func(T a); // 值传递
void func(T* ptr); // 指针传递

对于简单的类型用值传递是可接受的,但当面对复杂的类型时值传递需要调用相关的构造函数等操作,这是不可接受的,因此一般使用指针传递。
一般来说这就已经够用了,但当c++引入了运算符重载后,指针传递就显现出它的弊病了。

// 假设我们定义了运算符重载+,并使用指针传递
T* operator+(T* a, T* b);
T a, b;
&a + &b; // 很丑的写法
a + b; // 这是符合我们理解的写法,但要求a,b都是指针

这就是引用传递所要解决的问题,让运算符的操作更符合我们的直观感觉。

T& operator+(T& a, T& b);
a+b;

另一个不同之处在于引用是一个初始化后就无法修改引用对象的特性,正由于该特性,c++中不存在这样的表述:

T& a; // 错误
T* b; // 正确
T t1, t2;
T& c = t1; // c 是 t1的别名
c = t2; // t1 = t2
b = &t1; // b指向t1
b = &t2; // b指向t2

最后总结一下两者的异同:
相同点:两者都是用来实现对外部某块地址的控制。
不同点:指针可以修改其指向的地址(当不是const时),因此也可以不进行初始化,而引用必须进行初始化,且在初始化之后就不能变更其引用对象了。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:37:43  更:2021-09-05 10:38:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:38:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码