3.3 指针类型

news2024/11/30 13:36:17

本节主要介绍了:什么是指针、怎么创建指针(空指针、解指针)、指针变量的赋值(空类型指针),提到了指向指针的指针。本片博客还给出了本节的课后习题及其答案,以便讨论交流。

什么是指针

指针是一种存储相关类型变量地址的变量,通常由“*”和相关类型组成,比如 * int、* string等。指针主要用来建立特定结构(如:链表、树)、管理在程序的执行过程中动态分配的对象、传递数组或大型的类对象等。

怎么创建指针

创建指针时由 指针标识符“*”和指针类型组成。同时创建多个指针变量时每个指针前面的“*”符号不能省略,还需要对每个指针变量赋初值。

int *pi = &ival;
int *pi = &ival, *pi2 = &ival2;

野指针

如果创建指针时没有对指针变量进行初始化,就存在指针指向不明的隐患,这种未明确指向的指针一般称为野指针。使用野指针可能会导致程序崩溃、数据损坏、代码出现未定义行为等问题。

int *pi;	//此时pi便是一个野指针
pi = &ival;	//(假设ival已经在前文定义)此时pi不再是野指针

空指针

当一个指针直指向空地址时即为空指针,空指针虽然不会像野指针一样在使用时导致代码出现问题,但无法对其进行解指针

int *pi = NULL;	//此时pi为空指针
*pi = ival;		//代码会报错,无法对空指针进行解指针

解指针

指针往往指向内存地址,解指针就是将指针指向的内存地址存储的数据显式的展示出来。

int ival = 1024;
int *pi = &ival;
cout << *pi;		//输出可得1024
cout << pi		//输出可得ival的存储地址

指针变量的赋值

变量无法赋给不同类型的指针。指针变量有着多种不同的赋值方式,且相互之间容易混淆,故要明确区分“赋值”和“赋地址”

int ival = 1024, ival2 = 2048;
int *pi = &ival, *pi2 = NULL;
//将pi的地址赋给pi2
pi2 = pi;		//此时,pi2与pi同时指向ival,*pi与*pi2的值同为1024
//将ival2的值赋给pi2
*pi2 = ival2;	//此时,*pi2、*pi与ival的值都被改为1024
//将ival2的地址赋给pi2
pi2 = &ival2;	//此时,pi2与ival2的地址相同
//给ival赋值1024
ival = 1024; 	//此时,*pi与ival的值同为1024,而pi2的值不发生改变

char ch = 'c';
char *pc = &ch;
pc = pi;		//错误,char*无法接收int*

空类型指针

空类型指针可以存储不同类型指针的地址,但是无法进行解指针操作,仅获得地址进行比较、查看等操作时,可以使用空类型指针。

void *pvi = NULL, *pvc = NULL;	//此时pv指向为空
pvi = pi;		//可以进行赋值
pvc = pc;		//可以进行赋值

pvi == pvc;		//正确,可以进行判等、大、小操作
pi == pc;		//错误,不能进行判等、大、小操作

指向指针的指针

指针可以理解为指向某一类变量地址的变量,那指向指针变量地址的变量即为指向指针的指针。

int ival = 1024;
int *pi = &ival;
int **ppi = &pi;

cout << ival << *pi << **ppi << endl;	//其结果均为1024
cout << &ival << pi << *ppi << endl;	//三者地址相同
cout << &pi << ppi << endl;				//两者地址相同

课后

练习
练习3.8:
已知下列定义
	int ival = 1024, ival2 = 2048;
	int *pi = &ival, *pi2 = &ival2, **ppi = 0;
说明下列赋值将产生什么后果?哪些是错误的?
	(a) ival = *pi3;	(e) pi = *pi3;
	(b)	*pi2 = *pi3;	(f) ival = *pi;
	(c) ival = pi2;		(g) pi = ival;
	(d) pi2 = *pi;		(h) pi3 = &pi2;
参考答案
(a) 错误,int*无法给int赋值
(b) 错误,int*无法给int赋值
(c) 错误,int*无法给int赋值(应改为ival = *pi2)
(d) 错误,int无法给int*赋值

(e) 错误,*pi3为空指针(执行f后e正确)
(f) 正确,ival = 1024
(g) 错误,int无法给int*赋值
(h) 正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重复请求取消(不发请求)

重复请求取消&#xff08;不发请求&#xff09; axios 有自带的取消请求方式&#xff0c; 但是 在请求已发出时&#xff0c;取消只是状态取消&#xff0c; 其实请求已经发出&#xff0c;消耗了服务器资源&#xff08;方式1&#xff09;。本文探究的是 在调用请求A时&#xff0c…

谷歌浏览器Chrome打开百度很慢,其他网页正常的解决办法,试了很多,找到了适合的

最近不知怎么的&#xff0c;Chrome突然间打开百度很慢&#xff0c;甚至打不开。不光我一个人遇到这问题&#xff0c;我同事也遇到这个问题。开发中难免遇到问题&#xff0c;需要百度&#xff0c;现在是百度不了。 作为一名开发人员&#xff0c;习惯了使用Chrome进行开发&#…

【C++】深入探讨基础输入输出及类型转换问题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目一&#xff1a;整数输入输出代码实现代码分析 &#x1f4af;题目二&#xff1a;ASCII 码转换为字符代码实现代码分析 &#x1f4af;cin 与 char 搭配行为的深入剖析问题…

GB28181系列三:SIP消息格式

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、SIP消息Header字段 二、SIP URI(URL) 三、SIP路由机制 1、路由机制介绍 2、严格路由&#xff08;Strict Routing&#xff09;与松散路由&#xff08;Louse Routing&#xff09; 3、总结 四、SIP消…

mvn-mac操作小记

1.安装brew 如果报错&#xff0c;Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc&#xff0c;最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…

算法与数据结构练习——异或

知识点讲解&#xff1a; 一、异或操作定义&#xff1a; 异或是指相同为0&#xff0c;不同为1&#xff0c;也可理解为无进位相加&#xff01;&#xff01; 很重要&#xff01;&#xff01; 二、关于异或运算的几个性质&#xff1a; 1.0^NN &#xff08;0和任何数异或都…

STM32G4系列MCU的Direct memory access controller (DMA)功能介绍之二

目录 概述 1 DMA通道 1.1 可编程数据大小 1.2 指针增量 2 通道配置 2.1 配置步骤 2.2 通道状态和禁用通道 3 模式应用 3.1 循环模式&#xff08;内存到外设/外设到内存的传输&#xff09; 3.2 内存到内存模式 3.3 Peripheral-to-peripheral模式 3.4 编程转移方向&a…

【一文读懂】大语言模型

学习参考 项目教程&#xff1a;中文教程 代码仓库&#xff1a;代码地址 仓库代码目录说明&#xff1a; requirements.txt&#xff1a;官方环境下的安装依赖 notebook&#xff1a;Notebook 源代码文件 docs&#xff1a;Markdown 文档文件 figures&#xff1a;图片 data_base&…

注册表修改键盘位置

1.winr 输入 regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 3.右键Keyboard Layout->新建->二进制值->取名Scancode Map 4.右键Scancode Map&#xff0c;修改如下 //第一列 自动生成序号&#xff0c;不用管 第一行 输入8个00 第二…

服务器密码错误被锁定怎么解决?

当服务器密码错误多次导致账号被锁定时&#xff0c;解决方法需要根据服务器的操作系统&#xff08;如 Linux 或 Windows &#xff09;和具体服务器环境来处理。以下是常见的解决办法&#xff1a; 一、Linux 服务器被锁定的解决方法 1. 使用其他用户账号登录 如果有其他未被…

shell脚本编写练习2

1.准备阶段 在根目录下创建一个目录来存储shell脚本 mkdir /s3 2.题目 1. 使用case实现成绩优良差的判断 #!/bin/bash# 假设成绩存储在变量GRADE中 read -p "请输入成绩&#xff08;0-100&#xff09;&#xff1a;" GRADE# 使用case语句进行判断 case $GRADE in[…

清远榉之乡托养机构探讨:自闭症的本质辨析

当人们谈及自闭症时&#xff0c;常常会产生一个疑问&#xff1a;自闭症是精神类疾病吗&#xff1f;今天&#xff0c;清远榉之乡托养机构就来为大家解开这个疑惑。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校&#xff0c;一直致力于为大龄自闭症患者提供专业的支持…

基于PoE交换机的智慧停车场监控组网应用

伴随城市发展快速&#xff0c;汽车保有量也不断增长&#xff0c;导致停车管理问题也愈发凸显。针对包括路侧停车位、地面停车场、地下停车场等场景的停车管理需求&#xff0c;通常会部署监控设备进行车位监测、现场安全监测等&#xff0c;助力构建智能化停车管理。因此如何为分…

.net XSSFWorkbook 读取/写入 指定单元格的内容

方法如下&#xff1a; using NPOI.SS.Formula.Functions;using NPOI.SS.UserModel;using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;/// <summary>/// 读取Excel指定单元格内容/// </summa…

10个Word自动化办公脚本

在日常工作和学习中&#xff0c;我们常常需要处理Word文档&#xff08;.docx&#xff09;。 Python提供了强大的库&#xff0c;如python-docx&#xff0c;使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本&#xff0c;帮助新…

红日靶场-5

环境搭建 这个靶场相对于前几个靶场来说较为简单&#xff0c;只有两台靶机&#xff0c;其中一台主机是win7&#xff0c;作为我们的DMZ区域的入口机&#xff0c;另外一台是windows2008&#xff0c;作为我们的域控主机&#xff0c;所以我们只需要给我们的win7配置两张网卡&#…

[Java]微服务之分布式事务

介绍 下单业务&#xff0c;前端请求首先进入订单服务&#xff0c;创建订单并写入数据库。然后订单服务调用购物车服务和库存服务: 购物车服务负责清理购物车信息库存服务负责扣减商品库存 问题分析: 下单过程中, 订单服务创建订单, 插入自己的数据库, 执行成功购物车服务, 清…

存储结构及关系(一)

学习目标 描述数据库的逻辑结构列出段类型及其用途列出控制块空间使用的关键字获取存储结构信息 段的类型 段是数据库中占用空间的对象。它们使用数据库数据文件中的空间。介绍不同类型的段。 表 表是在数据库中存储数据的最常用方法。表段用于存储既没有集群也没有分区的表…

cesium 3dtile ClippingPlanes 多边形挖洞ClippingPlaneCollection

原理就是3dtiles里面的属性clippingPlanes 采用ClippingPlaneCollection&#xff0c;构成多边形来挖洞。 其次就是xyz法向量挖洞 clippingPlanes: new this.ffCesium.Cesium.ClippingPlaneCollection({unionClippingRegions: true, // true 表示多个切割面能合并为一个有效的…

AMD的AI芯片Instinct系列介绍

AMD最强AI芯片发布&#xff01; 在旧金山举行的Advancing AI 2024大会上&#xff0c;AMD推出Instinct MI325X AI加速器&#xff08;以下简称MI325X&#xff09;&#xff0c;直接与英伟达的Blackwell芯片正面交锋。 现场展示的数据显示&#xff0c;与英伟达H200的集成平台H200 …