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++中二级指针(指针引用)解释总结

今日在看视频学东西时,大量用到二级指针,于是便查阅资料对指针进行了研究总结。

1. 为什么会用到指针(或引用)?

在一个函数的执行中,局部变量发生的变换不会作用在函数外(且值传递浪费内存)。因此便用到了指针(或引用)来通过地址传递从而使函数的执行结果对全局都有影响。

2. 为什么会用到二级指针(或指针引用)?

a、例如一个通讯录系统,一个大的系统里面,有多个对象需要修改,而每个对象里面又有多个值需要修改,因此这里便需要通过多层指针来嵌套。即多维数组中的参数传递(此处的系统下的对象便为二级指针)。
b、对指针进行操作(修改、释放内存空间等)对于一个正常的指针变量(等同于系统中每个对象里面的属性),你可以在函数体中对其指向的值进行修改,如下图:在这里插入图片描述
但若你想修改p指向的地址来修改其中的值(也就是说,把指针当成变量,修改指针)(系统中的每个对象),如下图
在这里插入图片描述

可以发现,值并没有发生改变。

因此,为了改变p指向的地址,此处引入二级指针。

3. 如何使用二级指针

void change(int** pp)
{
	int* c = new int(20);
	*pp = c;//这里的**pp指向p指针指向的内容而*pp指向p指针
}	

int main() 
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	change(pp);
	cout << "a=" << a << endl;
	cout << "p=" << p << endl;
	cout << "&a=" << &a << endl;
	cout << "*p=" << *p << endl;
	cout << "**p=" << **pp << endl;
	system("pause");
	return 0;
}

其结果如下在这里插入图片描述
可知,在二级指针下,将p的内容改成了int(20)的地址,从而p在解引用时,其值变为了20。

4.如何使用指针引用

cpp中提供了相比二级指针更好的概念——指针引用,可以通过指针引用来不那么绕地模拟二级指针,对一级指针的内容进行修改,其修改如下:

void change(int* &pp)
{
	  pp = new int(20);
	
}	
int main() 
{
	int a = 10;
	int* p = &a;
	change(p);
	cout << "a=" << a << endl;
	cout << "p=" << p << endl;
	cout << "&a=" << &a << endl;
	cout << "*p=" << *p << endl;
	system("pause");
	return 0;
}

本代码中,即将p取个别名pp,对pp的修改就是对指针p的修改,既可以修改其p的地址也可修改其p指向的内容。其结果与上文一样。
在这里插入图片描述

5.总结

a、指针就是地址,而*符号在地址的左边便是获得地址对应的值。
b、引用就是给变量起别名,但其内部的本质是指针常量(即地址不变,内容可变)。而指针引用的定义格式为int* &p,其中int*是数据类型,&是引用要求,p是别名。
c、在上述的代码中,无论是用指针引用还是二级指针的方法,一旦对p进行修改,会导致pa脱钩,此时若再出现一个函数使*p=40,那么a也仍为10。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:21:44  更:2021-10-25 12:23:31 
 
开发: 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/24 5:50:44-

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