【初赛】指针 - Slayer

news/2025/9/19 10:05:06/文章来源:https://www.cnblogs.com/slayer-wt/p/19100204

指针的性质是理解其行为和使用方式的核心,主要包括以下几个方面:

1. 指针是存储地址的变量

指针的本质是一个变量,但其存储的不是数据本身,而是另一个变量(或内存单元)的内存地址

  • 例如:int a = 10; int* p = &a; 中,p 存储的是 a 的内存地址(如 0x7ffd6b6a45c4),而非 10

2. 指针具有明确的类型

指针的类型由其指向的数据类型决定(格式为 类型*),且类型决定了指针的访问规则

  • 步长

    :指针的算术运算(+n / -n)的偏移量由类型决定(偏移 n × 类型大小 字节)。

    • 例如:int* 指针 +1 偏移 4 字节(32 位系统),char* 指针 +1 偏移 1 字节。
  • 解引用权限:解引用(*p)时,编译器会根据指针类型解析内存中的数据(如 int* 会读取 4 字节作为整数)。

3. 指针的大小与系统位数相关,与指向类型无关

在同一操作系统和架构下,所有指针的大小固定,取决于系统的地址总线宽度:

  • 32 位系统:指针大小为 4 字节(可表示地址范围 0~2³²-1)。
  • 64 位系统:指针大小为 8 字节(可表示地址范围 0~2⁶⁴-1)。
  • 例如:int*char*double* 在 64 位系统中均占 8 字节。

4. 指针可进行有限的算术运算

指针支持 +-++-- 等算术运算,但运算结果与普通数值不同:

  • 运算对象只能是整数(表示偏移的元素个数)。
  • 结果是 “新的地址”:p + n 表示指向 p 所指元素之后的第 n 个同类型元素。
  • 不支持 */ 等运算(无实际意义)。

5. 指针可指向指针(多级指针)

指针本身也是变量,因此可以有 “指向指针的指针”(二级指针)、“指向二级指针的指针”(三级指针)等,形成多级间接访问:

  • 例如:int a = 10; int* p = &a; int**pp = &p; 中,pp 是二级指针,** pp 等价于 a
  • 用途:在函数中修改指针本身(如动态分配内存时传递指针的地址)。

6. 指针可以为空(NULL)

指针可以被赋值为 NULL(C 中定义为 (void*)0,C++11 后推荐 nullptr),表示不指向任何有效内存

  • 作用:避免 “野指针”(未初始化的指针),是指针初始化的安全选择。
  • 注意:对 NULL 指针解引用(*NULL)会导致程序崩溃(未定义行为)。

7. 指针与数组的关联性

数组名本质是指向首元素的 “常量指针”(不可被重新赋值),因此指针与数组访问可相互替代:

  • 数组元素 arr[i] 等价于 *(arr + i)*(p + i)p 是指向数组首元素的指针)。
  • 区别:指针是变量(可被赋值),数组名是常量(不可被赋值)。

8. 指针的 const 修饰限制可修改性

const 与指针结合时,会限制指针的 “指向” 或 “指向的数据” 的可修改性:

  • const int* p:指向常量的指针,p 可改指向,但不能通过 p 修改所指数据。
  • int* const p:指针常量,p 的指向不可改,但可通过 p 修改所指数据。
  • const int* const p:指向常量的指针常量,两者均不可改。

9. 指针可作为函数参数 / 返回值

  • 作为参数:实现 “传地址调用”,允许函数修改外部变量(突破值传递的限制)。
  • 作为返回值:可返回动态分配的内存地址或静态变量地址(禁止返回局部变量地址,因其生命周期随函数结束而结束)。

10. 指针可能成为 “野指针”(危险性质)

野指针是指向无效内存的指针(如未初始化的指针、指向已释放内存的指针):

  • 危害:解引用野指针可能导致程序崩溃、数据损坏或安全漏洞。
  • 避免方式:指针初始化时设为 NULL;释放内存后及时置空;不返回局部变量地址。

总结:指针的核心性质围绕 “地址存储”“类型关联”“内存操作” 展开,其灵活性和危险性并存,理解这些性质是正确使用指针的基础。

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

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

相关文章

国产化FPGA-2050-基于JFMK50T4(XC7A50T)的核心板

基于JFMK50T4(XC7A50T)的核心板(IEB-PS-3051-邮票孔) 一、核心板概述板卡基于JFMK50T4国产化FPGA芯片,设计的一款工业级核心板,板卡集成主芯片、电源、DDR、配置芯片,大大减轻客户的扩展开发困难。丰富的IO和…

hbase学习2

一、表管理操作创建表 hbase create 表名, 列族1, 列族2, ...示例:创建student表,有info和score两个列族 create student, info, score 2. 查看所有表 hbase list 3. 查看表描述 hbase describe 表名 describe stude…

exl 表格手动导入mysql

exl 表格手动导入mysql数据如,有一份exl表格如何整理成导入的sql A 35 =A2&B2 ="""&"&C2&"&"""&"," ="""&if("…

基于Python+Vue开发的健身房管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的健身房管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于P…

技术圈的“绯闻女孩”:Gossip是如何把八卦秘密传遍全网的?

技术圈的“绯闻女孩”:Gossip是如何把八卦秘密传遍全网的?Gossip协议,中文可译为“流言蜚语”“闲话”或“八卦”,形象地描述了该协议的工作方式——类似于人类社会中的信息传播模式。Gossip协议最早由Xerox公司的…

2025年纷享销客生态伙伴大会无锡站圆满举办!

近日,2025年纷享销客生态伙伴大会(无锡站)成功举办。大会以“智享未来,领创 CRM 新纪元”为主题,吸引了众多生态伙伴齐聚一堂,共话 CRM 行业新趋势,共探 AI 赋能下的客户经营新范式。一、数智化浪潮下的CRM变革…

英语_阅读_digital technology_待读

These days, digital technology is everywhere in our lives.如今,数字科技无处不在地出现在我们的生活中。 From smartphones to tablets, we use digital devices every day at school, at home and when hanging …

达梦 两个bug json 导致数据库crash 和 优化器解析or 导致结果不一样

##sample1 无法解析 json 数据库直接crash. 分析函数,定位到BUG 升级数据库软件,问题得到规避 ########sample 2 优化器解析or 导致结果不一样--测试1 原有的查询顺序,查到空行。 SQL> SELECT coltablename,…

MySQL迁移至GreatSQL后,timestamp字段插入报错解析

MySQL迁移至GreatSQL后,timestamp字段插入报错解析 背景描述 某业务系统进行国产化适配,将MySQL的数据迁移到 GreatSQL 后,执行 INSERT INTO ,update_time传参为空时报错,报错信息为:ERROR 1048 (23000): Column u…

2025年文件摆渡系统哪个品牌好推荐

内容概要 在寻找文件摆渡系统的过程中,企业往往关心哪个品牌能够更好地满足其安全、高效的数据交换需求。2025年,市场上涌现出众多品牌,但“文件摆渡系统哪个品牌好”这一问题,不少企业给出了共同的答案——Ftrans…

DevExpress WPF中文教程:DataGrid - 服务器数据和大型数据源

DevExpress WPF中文教程:DataGrid - 服务器数据和大型数据源DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程…

VU9P板卡设计方案:565-基于VU9P的32@ SFP28+4@ QSFP28路光纤交换板卡

、板卡概述 板卡基于Xilinx FPGA VU9P 设计的一款32路SFP28+4路QSFP28的光纤交换板卡,用于以太网的交换功能的验证。 二、板卡原理框图三、板卡主要性能 ● 主芯片:选用 XCVU9P-2FLGB2104I(702, 76)47.5*47.5 ● 3…

Python中使用列表、map和filter函数配合lambda表达式来操作集合

在 Python 中,map()、filter() 和 lambda 表达式是处理集合(如列表)的常用工具,可以快速实现 转换 和 过滤 操作。以下是具体示例:1. map() 函数:对列表元素进行转换 作用: 对列表的每个元素应用一个函数,返回…

深入解析:SSM商品导向型模特管理系统-计算机毕业设计源码01876

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大模型decoder中权重矩阵的理解 - 实践

大模型decoder中权重矩阵的理解 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

文件安全外发平台用哪个,最佳选择是什么?

内容概要 在探讨文件安全外发平台用哪个这一话题时,我们首先要对文件安全外发平台有一个全面的了解。这类平台主要用于确保企业文件在外部传输过程中的安全性,防止数据泄露。市面上存在多种文件安全外发平台,它们各…

【初赛】数 - Slayer

0x3f3f3f3f = 1061109567 0x7f7f7f7f = 2139062143 0x7fffffff = 2147483647 0xffffffff = 4294967295 0x1fffffff = 536870911 0x1f1f1f1f = 522133279

http连接(webFlux vs tomcat)

HTTP连接的最大数量不是一个固定的值,它取决于一个由硬件资源、操作系统配置、网络栈、以及应用程序本身共同构成的复杂系统。 简单来说:在一台配置良好的现代服务器上,使用异步非阻塞模型(如WebFlux),支持超过1…

英语_阅读_Generative AI_待读

Artificial Intelligence (AI) has become part of our everyday life.人工智能(AI)已经成为我们日常生活的一部分。 It makes our smart devices smarter.它让我们的智能设备变得更聪明。 You might have already u…

【初赛】链表 - Slayer

链表性质知识点总结 链表是一种线性数据结构,其核心特点是数据元素(称为 “节点”)通过指针或引用连接,而非像数组那样存储在连续的内存空间中。这种结构决定了它与数组截然不同的性质,适用于频繁插入 / 删除、内…