嵌入式开发学习日志(指针与数组及传参) 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])

相关新闻

游戏战斗数值模拟实战:用CombatCalculator实现数据驱动的技能平衡

游戏战斗数值模拟实战:用CombatCalculator实现数据驱动的技能平衡

如果你是一名游戏开发者,尤其是负责战斗系统、数值平衡或技能设计的同学,最近是不是总被这几个问题困扰: 新设计的技能,伤害公式写出来了,但实际打出来是秒天秒地还是刮痧,心里完全没底,只能等…

2026/8/8 12:12:33 阅读更多 →
AI搜索CLI:用自然语言革新开发者信息检索与工具选型

AI搜索CLI:用自然语言革新开发者信息检索与工具选型

1. 从“敲命令”到“说人话”:AI搜索CLI的范式革命 如果你和我一样,是个常年泡在终端里的开发者,对 grep 、 find 、 curl 这些命令熟稔于心,那你肯定也经历过这样的时刻:想找一个特定的技术解决方案&#xff0c…

2026/8/7 9:30:19 阅读更多 →
AI辅助服务器迁移实战:低成本高效完成运维任务

AI辅助服务器迁移实战:低成本高效完成运维任务

1. 项目背景:当技术小白遇上服务器迁移 去年双十一买的腾讯云轻量应用服务器快到期了,续费价格涨了三倍多。作为非技术出身的个人站长,我盯着后台"迁移镜像"的按钮发愁——这玩意儿要是搞砸了,我那个日均3000PV的小博客…

2026/8/8 12:13:20 阅读更多 →

最新新闻

【CarbonData】CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?

【CarbonData】CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?

CarbonData 安全模型深度解析:与 Kerberos、Ranger 的生产级集成实践 用户问题原文:“CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?” 在金融、电信等高度监管的行业中,数据安全不是锦上添花的功能,而是系统设计的基石。任何数据平台都必须满…

2026/8/8 12:13:23 阅读更多 →
揭秘北京服饰网站建设背后的真相,为什么90%的商家在这个关键环节翻车了

揭秘北京服饰网站建设背后的真相,为什么90%的商家在这个关键环节翻车了

做服饰生意的朋友,咱们坐下来聊聊天。我知道,现在的圈子不容易。线上流量贵得离谱,线下客流被电商分流,大家都在找出路。很多人觉得,只要我衣服好看,款式新,肯定能卖出去。这话没错,但在那个“酒香也怕巷子深”的年代,光有好货是不够的。你得让人看见你,得让人信任你…

2026/8/8 12:13:23 阅读更多 →
Miniconda安装配置全攻略:从零掌握Python虚拟环境管理

Miniconda安装配置全攻略:从零掌握Python虚拟环境管理

1. 项目概述:为什么我们需要Anaconda/Minconda? 如果你刚开始接触Python,或者已经写了一些脚本,但被各种包依赖、版本冲突搞得焦头烂额,那么你大概率需要一个环境管理工具。Anaconda和它的轻量版兄弟Miniconda&#xf…

2026/8/8 12:13:23 阅读更多 →
嵌入式开发中volatile关键字的原理、应用场景与实战避坑指南

嵌入式开发中volatile关键字的原理、应用场景与实战避坑指南

1. 项目概述:为什么我们需要关心 volatile? 在嵌入式开发和底层系统编程的世界里, volatile 这个关键字,就像一位沉默的哨兵。它不常出现在日常应用层代码中,但一旦你开始与硬件寄存器、中断服务程序或多线程共享变量…

2026/8/8 12:13:23 阅读更多 →
Vue 3 中文文档完全指南:从零基础到项目实战的权威教程

Vue 3 中文文档完全指南:从零基础到项目实战的权威教程

Vue 3 中文文档完全指南:从零基础到项目实战的权威教程 【免费下载链接】docs-next-zh-cn :cn: Chinese translation for v3.vuejs.org 项目地址: https://gitcode.com/gh_mirrors/do/docs-next-zh-cn Vue 3 中文文档 (docs-next-zh-cn) 是 Vue.js 3 官方文档…

2026/8/8 12:13:23 阅读更多 →
本地数据可控 AI 助手 OpenClaw ·Windows端解压安装、初始化全流程拆解

本地数据可控 AI 助手 OpenClaw ·Windows端解压安装、初始化全流程拆解

⚠️别盲目安装!OpenClaw(龙虾 AI)Windows 部署排坑手册,全覆盖各类安装报错 本文基于 Windows 稳定版本 OpenClaw v2.9.0 撰写,适配 Win10、Win11 全系操作系统,整套整合压缩包搭建耗时控制在 5~10 分钟。…

2026/8/8 12:12:23 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →