嵌入式开发学习日志(指针与数组及传参) day12 持续更新中

发布时间:2026/9/25 2:21:16

嵌入式开发学习日志(指针与数组及传参) day12 持续更新中 一、指针与一维字符型数组的关系1. 数组名的本质一维字符数组char str[] {hello};中str是数组名它代表首元素地址即str[0]类型为char *。数组名是一个地址常量不可被赋值修改如str ...非法。2. 指针算术运算str 1指向第二个元素str[1]地址偏移量为sizeof(char)字节通常为1字节。str n指向第n1个元素等价于str[n]。解引用*(str n)等价于str[n]。3. 内存布局示意地址: 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 内容: h e l l o \0 指针: str str1 str2 str3 str4 str5注意字符串以\0结尾是C语言字符串处理的终止标志。4. 函数参数传递函数形参char str[]与char *str等价均接收数组首地址。示例int mystrlen(char str[])与int mystrlen(char *str)功能完全相同。二、数组指针1. 定义与本质数组指针本质是指针指向整个数组。语法int (*p)[5];—— 声明一个指针p它指向一个包含5个int元素的数组。该指针变量本身占8字节64位系统但其指向的内存块大小为5 * sizeof(int)。2. 与普通指针的区别int a[5] {1,2,3,4,5};a或a[0]类型为int *指向首元素。a类型为int (*)[5]指向整个数组。a 1偏移sizeof(int)字节 → 指向a[1]。a 1偏移sizeof(a)字节 → 指向数组末尾之后的位置即跳过整个数组。3. 内存布局示意地址: 0x2000 0x2004 0x2008 0x200C 0x2010 0x2014 内容: 1 2 3 4 5 (越界) 指针: a a1 a2 a3 a4 a1 ↑ a (指向整个数组)4. 特别注意sizeof(a)返回整个数组大小如5 * 4 20字节。a不能当作int *使用其类型是int (*)[5]用于指向数组整体。三、指针与二维数组1. 二维数组的本质二维数组int a[2][3] {1,2,3,4,5,6};在内存中是连续存储的按行优先排列。数组名a代表首行地址即a[0]类型为int (*)[3]指向含3个int的一维数组。a[0]是第一行的数组名类型为int *指向a[0][0]。a[1]是第二行的数组名类型为int *指向a[1][0]。2. 指针运算与访问a 1→ 指向第二行即a[1]偏移量为3 * sizeof(int)。*(a m) n→ 等价于a[m][n]。*(*(a m) n)→ 等价于a[m][n]。3. 内存布局示意地址: 0x2000 0x2004 0x2008 0x200C 0x2010 0x2014 内容: 1 2 3 4 5 6 行指针: a[0] ← a[0][0]~a[0][2] a[1] ← a[1][0]~a[1][2] 整体指针: a → a[0], a1 → a[1]4. 作为函数参数传递二维数组作函数参数时必须指定列数行数可省略。正确写法void print_2D_array(int a[][3], int hang); // 列数必须指定 void print_2D_array(int (*pa)[3], int hang); // 数组指针形式调用print_2D_array(a, 2);字符型二维数组同理char str[3][100] {hello, world, thanks}; void print_str_array(char str[][100], int hang); void print_str_array(char (*pstr)[100], int hang);总结对比表概念类型含义示例一维数组名T *首元素地址str→str[0]数组指针T (*)[N]指向整个数组a→int (*)[5]二维数组名T (*)[N]首行地址a→a[0]二维数组行名T *某行首元素地址a[0]→a[0][0]函数参数传递T arr[][N]或T (*p)[N]必须指定列数void f(int a[][3])
延伸阅读

更多相关文章

2026/9/23 17:27:17

C# JSON解析实战:System.Text.Json与Newtonsoft.Json深度对比与性能优化

1. 从“字符串”到“对象”:为什么C#开发者必须掌握JSON解析 如果你用C#写过任何需要和外部系统打交道的程序,无论是调用一个Web API、读取一个配置文件,还是把数据存到NoSQL数据库里,那你肯定绕不开JSON。它就像程序员世界里的“…

2026/9/19 22:53:22

腾讯:合成书本级文档结构的教科书数据

📖标题:Beyond Rephrasing: Book-Level Organization Improves Synthetic Textbook Data for Mid-Training 🌐来源:arXiv, 2607.28109v1 🛎️文章简介 🔸研究问题:在合成教科书数据用于大模型中…

2026/9/25 2:17:40

安全审计不是扫描,而是业务逻辑临床问诊

1. 这不是“安全扫描”,而是对代码逻辑的临床问诊很多人第一次听说“security-audit-skill”时,下意识会把它等同于跑个nmap、扫个burpsuite、或者点开 IDE 里那个绿色的“Security Scan”按钮——然后等着弹出一串红字告警,打勾修复&#xf…

2026/9/25 2:17:40

GD32高级定时器互补PWM与死区配置实战指南

电机驱动做久了,你会发现一个规律:真正炸管子的场景,十有八九不是电流算错了,而是PWM波形在开关切换那一刻出了问题。上下桥臂的驱动信号如果存在瞬间同时导通,哪怕只有几百纳秒,轻则效率骤降、管子发热&am…

2026/9/25 2:17:40

ZYNQ7020裸机Multiboot升级原理与实战

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

2026/9/25 2:17:40

Rabin密码系统原理与CTF实战解密

1. 项目背景与核心价值Rabin密码系统作为首个被证明在特定条件下与整数分解问题等价的非对称加密方案,在CTF密码学挑战中占据着独特地位。这道来自BUUOJ平台的"坏蛋是雷宾"题目,巧妙地将Rabin算法的数学特性转化为需要逆向破解的暗号系统。我在…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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