C语言指针进阶 学习笔记

发布时间:2026/11/13 12:27:03

C语言指针进阶 学习笔记 职坐标学习C语言指针进阶 学习笔记一、字符指针1. 核心概念定义char *ptr;指向字符类型数据的指针。基本用法可以指向单个字符也可以指向字符数组字符串。2. 字符串常量与字符数组 这是字符指针中最容易混淆的概念也是文档的重点。定义方式代码示例内存存储位置可修改性相同字符串地址字符指针const char *p hello;常量区 (只读)不可修改 (通过指针)相同 (指向同一块内存)字符数组char arr[] hello;栈区 (可读写)可修改不同 (各自开辟新内存)结论字符指针指向字符串常量后不能通过指针修改字符串内容如 *(p1) a; 会报错。C/C 会优化字符串常量相同的字符串常量在内存中只有一份所以不同指针指向相同字符串时地址是相同的。字符数组每次定义都会在栈上开辟新的内存块所以地址不同。3. 常量指针 vs 指针常量常量指针 (const char *p)含义指向常量的指针。特点指针指向的内容不能通过该指针修改但指针本身可以改变指向可以指向别的地址。代码示例 const char *p hello; // p[0] H; // 错误不能修改指向的内容 p world; // 正确指针可以指向新的地址指针常量 (char * const p)含义指针本身是常量。特点指针本身不能改变指向初始化后不能指向别处但可以通过指针修改指向的内容。代码示例const char *p hello;// p[0] H; // 错误不能修改指向的内容p world; // 正确指针可以指向新的地址二、指针数组与数组指针 这两个概念仅一字之差但含义完全不同。1. 指针数组定义数据类型 *数组名[长度]; (如 int *p[5];)本质是一个数组数组里的每个元素都是指针。内存存放了多个地址。用途常用于存储多个字符串或管理多个数组。代码示例int a 1, b 2;int *ptrArr[2] {a, b}; // 定义一个指针数组printf(%d, *ptrArr[0]); // 输出 12. 数组指针定义数据类型 (*指针名)[长度]; (如 int (*p)[5];)本质是一个指针指向一个数组。内存只存放一个地址数组的首地址。用途常用于操作二维数组。步长p1 跳过的是整个数组的大小例如 int[5] 跳过 20 字节。代码示例int arr[3] {1, 2, 3};int (*p)[3] arr; // 定义一个数组指针指向包含3个int的数组printf(%d, (*p)[0]); // 输出 1*p 解引用得到数组arr3. 快速区分口诀[] 优先级高于 *。int *p[5]p 先和 [] 结合所以是数组。int (*p)[5]() 强制 p 先和 * 结合所以是指针。三、数组参数与指针数组参数1. 数组传参在函数参数中int arr[]、int arr[10] 和 int *arr 本质上是等价的都退化为指向首元素的指针。2. 指针数组传参形式1void func(int *arr[], int len) —— 明确表示是指针数组。形式2void func(int **ptr, int len) —— 使用二级指针接收。原因指针数组名代表首元素地址而首元素本身就是一个指针int*所以数组名的类型是 int**。代码示例void printPtrArray(int **p, int len) {for(int i 0; i len; i) {printf(%d , *p[i]); // 通过二级指针访问}}}四、函数指针与指针函数1. 函数指针定义指向函数的指针。语法返回值类型 (*指针变量名)(参数列表);示例int (*p)(int, int) getMax;调用(*p)(1, 2) 或 p(1, 2)。代码示例int add(int a, int b) { return a b; }int main() {int (*func_ptr)(int, int) add; // 定义并赋值int result func_ptr(3, 4); // 通过指针调用printf(%d, result); // 输出 7return 0;}2. 指针函数定义返回值是指针的函数。语法返回值类型* 函数名(参数列表);示例int* func(int a);注意不能返回局部变量的地址因为函数结束时局部变量会被销毁通常返回静态变量、全局变量或堆内存的地址。代码示例int* getStaticAddr() {static int num 100; // 必须是static或全局变量return num; // 返回静态变量的地址}3. 对比速记函数指针本质是指针指向函数。指针函数本质是函数返回指针。五、回调函数1. 概念通过函数指针调用的函数。把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时就称为回调。2. 实现步骤1.定义回调函数类型使用 typedef 定义函数指针类型。typedef void (*CallbackType)(int);2.实现具体的回调函数编写实际功能的函数如 void myFunc(int t)3.编写接收回调的函数该函数的参数包含回调函数指针。void doWork(CallbackType cb, int t) { cb(t); }4.调用在 main 函数中将具体函数名作为参数传递。3. 代码示例#include stdio.h// 1. 定义回调函数类型typedef void (*CookingCallback)(int);// 2. 实现具体的回调函数void makeFish(int time) {printf(清蒸鱼蒸 %d 分钟\n, time);}void makeMeat(int time) {printf(红烧肉炖 %d 分钟\n, time);}// 3. 编写接收回调的函数void startCooking(CookingCallback callback, int time) {printf(起锅烧油...\n);callback(time); // 调用传进来的函数printf(出锅\n);}int main() {// 4. 调用startCooking(makeFish, 10); // 传入 makeFish 函数startCooking(makeMeat, 60); // 传入 makeMeat 函数return 0;}六、核心知识点速记卡知识点关键总结字符指针char *p str 指向常量区不可改char arr[] 在栈区可改。指针数组int *p[5]数组存指针常用于存多个字符串。数组指针int (*p)[5]指针指数组常用于二维数组传参。函数指针int (*p)(int)指向函数的指针实现多态/回调。指针函数int* func()返回地址的函数勿返局部变量地址。回调函数函数指针作为参数传递实现“策略模式”或解耦。二级指针int **p用于接收指针数组名或修改一级指针的指向。学习建议区分优先级重点练习 * 和 []、() 的结合优先级这是区分“指针数组”和“数组指针”、“函数指针”和“指针函数”的关键。理解内存画图理解字符串常量在常量区而数组在栈区这解释了为什么一个能改一个不能改。实战回调尝试写一个简单的计算器或排序算法如 qsort 的比较函数体会回调函数的灵活性。
延伸阅读

更多相关文章

2026/11/13 12:27:01

国产桌面Agent横评:LobsterAI在4个工程师敏感指标上的突围表现

深度解析:桌面AI助理技术选型的四大核心指标与工程实践 当桌面级AI助理从概念走向落地,技术选型的核心矛盾已从「能否实现」转向「如何控风险」。本文基于数十个企业级部署案例,拆解国内主流产品的技术方案,为工程师提供深度选型…

2026/11/13 12:27:01

无线动能开关|商业商超灵活氛围控灯方案

一.系统概述大型商超、购物中心、连锁商铺专柜迭代更新频繁,商品陈列、专柜布局、橱窗场景经常调整,对灯光控制的灵活性要求极高。传统固定布线开关点位死板,专柜移位、业态更新时需要重新布线改开关,施工周期长、影响门店营业&am…

2026/11/9 8:52:49

监控系统中NTP网络时间服务器的应用

NTP网络时间服务器在监控系统中的应用具有显著的技术必要性。 一、技术背景与需求分析 现代化监控系统通常由大量网络摄像头(IPC)、网络硬盘录像机(NVR)、管理平台及各类传感器组成。这些设备各自依靠内部晶振独立计时&#xff0c…

2026/11/13 12:24:22

电工作业内容及名称怎么报名?怕考不过白交培训费?看这篇就够了

电工作业内容及名称怎么报名?怕考不过白交培训费?看这篇就够了 你是不是也在担心,报名电工作业证后,花了钱却考不过?怕考不过白交培训费,这几乎是每个想考电工证的人心中的顾虑。电工作业内容及名称怎么报名?怎么避免踩坑?今天就从河南水利工程从业者…

2026/11/13 12:24:22

大余考电工证在哪里官方回应学历不高也能报上名

大余考电工证在哪里官方回应学历不高也能报上名 你是不是也在担心,学历不高怕报不上名?别急, 官方回应 了,电工证报考其实对学历要求并不高,只要你符合年龄、健康等基本条件,就有资格参加考试。特别是像你这样在大余从事市政工程或建筑行业的人员,考…

2026/11/13 12:24:22

电工证可以领钱多少钱?怕考不过白交培训费,全流程避坑指南

电工证可以领钱多少钱?怕考不过白交培训费,全流程避坑指南 怕考不过白交培训费?你不是一个人。鹤壁一家中小施工企业负责人老李,去年就因为没搞清楚电工证报名流程,花了3000块培训费,结果考试挂了,连复审都没机会。今天我就从他的经历出发,带你一…

2026/11/13 12:24:22

在贵阳考电工证在哪 内部消息告诉你怎么报名不被拒

在贵阳考电工证在哪 内部消息告诉你怎么报名不被拒 学历不高怕报不上名,这事儿我懂,我自己当年就是个初中毕业,连高中都没上过,照样考到了低压电工证,现在还能接一些工程活儿。说实话,很多人觉得学历不够就考不了证,其实是被误导了。…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑