Linux入门DAY14(高频难点:指针)

发布时间:2026/9/28 14:14:35

Linux入门DAY14(高频难点:指针)
前言在C语言学习过程中指针属于重难点很多同学容易混淆指针数组、数组指针、指针函数、函数指针几组概念做题写代码经常踩坑。本文结合课堂笔记梳理四类高频指针知识点区分概念本质、语法、使用场景以及易错禁区适合期末复习、刷题巩固帮助理清指针相关的逻辑避开野指针、参数类型不匹配等常见bug。1 指针数组本质数组数组中存储的元素为指针。语法格式int *a[5];char *p[5];int *a[5] 代表定义数组数组可以存放5个 int* 类型指针64位环境下一个指针占8字节整个数组总大小40字节。1.1 初始化// 将数组内全部指针初始化为空指针char *p[5] {NULL};// 存放字符串常量数组保存每个字符串的首地址char *p[5] {hello,world,how,are,you};p[0] 为 char* 类型保存字符串 hello 首字符 h 的地址。1.2 指针数组 VS 二维字符数组考试高频考点//二维字符数组存储字符串本体总字节数3*100300字节char str[3][100] {hello,world,how};//指针数组仅存储各个字符串的首地址3个指针64位下占24字节char *pstr[3] {hello,world,how};项目 二维字符数组 char str[N][100] 指针数组 char *pstr[N]存储内容 保存字符串本身 保存各个字符串的首地址数组名退化类型 数组指针 char (*)[100] 二级指针 char **字符修改 可以修改数组内每一个字符 字符串常量空间不可修改排序交换 需要strcpy拷贝字符串开销大 直接交换指针效率高⚠注意二者类型不同不能互相作为函数实参传递会报类型不匹配警告。2 二级指针本质指针用于存放另一个指针变量的地址。int **p; //保存int*类型指针变量的地址char **p; //保存char*类型指针变量的地址二级指针两大使用场景1. 函数内部修改外部的指针变量想要在被调用函数修改主函数的指针变量实参传递指针变量的地址形参使用二级指针接收。2. 接收指针数组指针数组的数组名传参时会退化为二级指针函数形参用 char ** 接收。示例代码void func(char **p){}int main(){char *arr[] {aa,bb};func(arr); //数组名arr退化为 char**return 0;}3 指针函数返回指针的函数本质函数该函数的返回值是指针类型。char* fun(void); //指针函数返回char*指针✅允许返回的地址1. static修饰的静态变量的地址2. 全局变量的地址3. 字符串常量的地址4. 函数参数传递进来的内存地址5. 堆上申请、尚未释放的内存地址❌禁止返回局部普通变量、局部数组的地址。函数执行结束局部栈内存被回收返回得到野指针。错误示例int* bad(void){int a 10;return a; //错误返回野指针}4 函数指针本质指针专门用来存放函数的入口地址函数名本身就是函数入口地址。4.1 定义语法返回值类型 (*指针名)(形参类型);示例//定义函数指针pfun指向返回int、拥有两个int参数的函数int (*pfun)(int,int);4.2 完整使用示例#include stdio.hint add(int a,int b){return ab;}int main(void){//1.定义初始化为空int (*pfun)(int,int) NULL;//2.赋值保存函数入口地址pfun add;//3.调用函数两种写法等价int ret pfun(10,20);//int ret add(10,20);printf(%d,ret);return 0;}4.3 核心应用回调函数将函数指针作为另一个函数的参数进行传递这个传入的函数称为回调函数主要作用降低代码耦合度。易混概念速查表写法 名称 本质 传参退化类型char *p[5] 指针数组 数组数组元素为指针 char **char (*p)[100] 数组指针 指针指向一维数组 无char* fun() 指针函数 函数返回指针 无int (*p)(int,int) 函数指针 指针保存函数入口地址 无做题小技巧观察括号1. (*p) 带括号代表是指针2. *p[] 无括号 [] 优先和变量结合代表是数组。小结本文区分了四组极易混淆的指针相关概念指针数组、二级指针、指针函数、函数指针。1. 指针数组是数组存放一堆指针传参退化为二级指针常用来管理多个字符串常量。2. 二级指针用来存放指针的地址两大用途函数内修改外部指针、接收指针数组。3. 指针函数是函数重点记住不能返回局部栈变量地址避免野指针。4. 函数指针是指针存储函数入口主要用于实现回调函数解耦代码。指针是C语言的灵魂做题写代码时先分清“它到底是数组还是函数还是指针”很多错误就可以直接规避。

相关新闻

深入分析Xcode中SwiftUI的可视化编辑工具:Canvas、Inspector与Library

深入分析Xcode中SwiftUI的可视化编辑工具:Canvas、Inspector与Library

2026/9/24 8:40:47

SwiftUI 带来的描述性构建界面能力,为 Xcode 引入诸多的可视化工具奠定了基础。可视化界面搭建,早期在网页开发中,曾经流行过,最著名的代表 Dreamweaver。如果把 HMTL 源码视为因,那么浏览器渲染的界面则为果。从最后的…

2026上海橡塑展怎么挑选展台设计搭建公司?认准高品质搭建服务商

2026上海橡塑展怎么挑选展台设计搭建公司?认准高品质搭建服务商

2026/8/29 2:19:27

2026 上海橡塑展汇聚众多橡塑材料、机械设备行业企业,海量展位同台亮相,想要抓住专业采购客商目光,高品质的展位落地效果尤为关键。不少参展企业筹备展会时,都会寻找靠谱的展台设计搭建团队。挑选合作方不能只看效果图&#xff0c…

GEO市场规模有多大?2026—2030年中国GEO市场规模预测

GEO市场规模有多大?2026—2030年中国GEO市场规模预测

2026/9/26 2:32:34

按照爱分析对中国GEO市场的预测,市场规模将从2026年的48亿元,依次增长至2027年的154亿元、2028年的430亿元、2029年的860亿元,并在2030年达到1,376亿元。2026—2030年复合增长率预计超过130%,GEO将在2030年迈向千亿级市场。这里的…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…