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++ Primer学习记录(6) -> 正文阅读

[C++知识库]C++ Primer学习记录(6)

有件事我很不理解,既然CSDN的网页版要好于手机软件,那为什么一直让我去下载软件呢?拿手机上CSDN浏览器搜东西都正常的很,想拿手机看点儿文章就卡个半天加载不出来,离大谱了属于是。

今天就按照昨天说的,说一说引用指针吧:

一.符号说明:

引用和指针对应的符号分别为&(连号符)和*(星号符),这两个符号本身其实属于操作运算符,对应的功能分别是取址和取值。

当我们定义一个变量时,需要开辟一个空间去储存变量并对其操作,空间大小据数据类型而定。打个比方,我们把这个空间比作一个房子,空间中储存的值比作住在房子里的人,变量的地址即房子建造时坐落的地址。当我们输出一个变量时,默认输出它的值(因为这就是变量的核心意义),如果我们想要知道变量的地址,便可以通过取址符&来得到这座房子的地址,自然也就可以稳定地对地址对应的内容进行操作。同理,当我们知道了一个变量的地址,我们可以通过取值符*来获取该地址中储存的内容,也就是通过居住的地址找到我们想找的人。

所以一个变量可以分为值和址两部分基础类型,数据类型用来描述和限定值的类型,而引用和指针则是说明该变量的基础类型。除指针外,其他的变量定义本质都是变量的值,而指针型变量的本质则是变量的地址。

int a=6; //定义一个变量a并初始化为6

std::cout << &a <<std::endl; //合法,输出a的地址(形如0x6ffelc的十六进制数)
std::cout << *a <<std::endl; //不合法,不能对值再取值
std::cout << *(&a) <<std::endl; //合法,输出a的值6

二.引用:

刚刚分别对两种符号做了简单的介绍,这里则要涉及到这两种符号的特殊用法:在定义变量时起到类似于关键字的作用,即一种特定的类型标志。

1.定义:

引用型变量的定义:数据类型 &变量名2?初始化(变量名1)

这里的&则不再视为取址操作的运算符,因为这是一个定义语句,我们不能在房子还没建好的时候就得到它的具体地址。在这里,&视作一种标志,说明该变量属于引用型变量。

2.意义:

对于引用型变量的意义,我们只需要记住一句话:引用就是别名

怎么理解这句话呢?很简单,我们只需要理解别名是什么就好了。

称呼一个人的方式有很多种,其中除了本来姓名之外的称呼就是别名。如:我本名是张x超,有人叫我小张,也有人叫我超哥。其中,除去我本来姓名之外的另外两种称呼即我的别名。名字却可以有很多,但是我只有一个,每当有人称呼这两个别名时,我就知道他们是在叫我。

引用就是这么个道理。我们先定义了一个变量a的同时,可以再定义一个引用型变量b去等同于a(变量名不能相同),而后我们对b进行操作即对a进行操作,即用不同的名字操作同一个变量。引用型变量是必须初始化的,而且初始化的方式必须是通过另一个变量来初始化

int a=6;    //定义变量a并初始化为6

int &b=a;   //定义引用型变量b来对a引用
b++;        //b++即a++
std::cout << a <<std::endl; //结果为6+1=7

3.与普通定义的异同:

一般定义一个变量时都是需要开辟新空间的,但是引用却不是,它是直接生成于其引用对象上的空间上的,就像别名不能脱离人这个本体而单独存在。

如上图,引用型变量b的地址完全等同于原变量a,相当于在同一个房子中对同一个人进行操作,只是称呼方式不一样罢了。同时,引用型变量的本质和普通变量一样,都是一个。?

三.指针:

类似于引用型变量对符号的特殊使用,指针也是一样。

1.定义:

指针型变量的定义:数据类型 *变量名 (初始化)

这里的*也不再被理解为取值操作的运算符,而是说明该变量的类型为指针型的标志。

2.意义:

对于指针型变量的理解,我们也需要记住一句话:指针就是地址

对这句话可以这么理解:每当定义一个变量,都需要开辟空间,而这个空间一旦开辟完成,则位置固定不动。指针型变量针对的就是这个空间所在的位置,其数据类型依然是用于描述并限定该空间中值的类型。

int a=6; //定义变量a并初始化为6
int *b;  //定义指针型变量b
b=&a;    //对a取址,将指针b指向a

std::cout<< a << std::endl; //输出a
std::cout<< b << std::endl; //输出b

std::cout<< &a << std::endl;//输出a对应的地址
std::cout<< *b << std::endl;//输出b所储存的值

可以看到,在将指针型变量b指向普通变量a之后进行各项输出,普通变量a输出了值6,指针型变量b则输出了a的地址,?而对b进行取址操作之后才输出了a的数值6。指针在定义的时候如果不初始化,则一般默认指向NULL(空),但是由于编译器的标准可能不同,保险起见在定义指针时最好人为让它成为一个空指针,避免因为指向不明产生野指针,导致未知错误:

int *b=nullptr;

nullptr是C++的关键字,即空指针。?

也可以从另一个角度去理解指针:指针就好比我们电脑上的光标,当我们通过鼠标操作光标,将其指向某个软件或网页时,我们就可以实际对其进行一系列操作。而光标不指向任何事物时,则认为它指向NULL,即空指针。

3.与普通定义的异同:

指针型变量在定义时可以选择初始化与否,这也说明不同于引用型变量,它是可以独立存在的。当我们通过&取得其他变量的地址,并将之赋给指针型变量时,我们称该过程为将指针型变量指向某个变量。当获取其它变量的地址时,自然也就可以通过指针型变量来实际影响其它变量。

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

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