嵌入式学习 day9:函数
一、二维字符数组二维字符数组本质上就是一个字符串数组——每一行存一个字符串。1. 定义cchar str[5][32]; // 5行每行最多31个字符留1个给\02. 元素的访问cstr[0] // 访问第0行代表第0个字符串 str[0][2] // 访问第0行第2列单个字符3. 初始化c// 方式一逐字符初始化 char str[5][32] { {h, e, l, l, o, \0}, {w, o, r, l, d, \0} }; // 方式二字符串初始化最常用 char str[5][32] {hello, world, how, are, you}; // 方式三全部置零 char str[5][32] {0};4. 输入与输出cchar str[5][32] {0}; // 输入5个字符串 for (int i 0; i 5; i) { scanf(%s, str[i]); // str[i] 本身就是地址不用加 } // 输出5个字符串 for (int i 0; i 5; i) { printf(str[%d] %s\n, i, str[i]); }⚠️ 二维字符数组的每一行都是一个一维字符数组str[i]本身就是字符串的首地址所以scanf不用加。二、函数1. 为什么需要函数有些操作要反复做——比如求两个数的最大值、判断闰年。每次都把同样的代码复制粘贴一遍代码会变得又臭又长改一个地方要改好几处。函数就是把重复的代码封装起来哪里需要就调用哪里。2. 函数的定义c函数类型 函数名(数据类型 形参1, 数据类型 形参2, ...) { 函数体; return 返回值; }几个要点函数名规则和变量名一样见名知意形参函数要处理的数据通过形参传进来函数类型返回值的数据类型不写默认int没有返回值就写void返回值函数运行完的结果通过return返回c// 例子求两个整数中较大的那个 int max(int a, int b) { return (a b) ? a : b; }3. 函数的调用cint result max(10, 20); // result 20传参规则实参个数和形参个数必须一一对应类型不匹配时会自动转换按形参类型转4. 函数的声明如果被调函数写在主调函数下面需要先声明c// 声明告诉编译器有这个函数 int max(int a, int b); int main(void) { int m max(10, 20); return 0; } // 定义 int max(int a, int b) { return (a b) ? a : b; }如果被调函数写在主调函数上面就不需要声明了。三、变量的作用域和生存周期1. 作用域哪里能用局部变量在函数或代码块{}内定义只能在这个范围内使用全局变量在所有函数外面定义整个文件都能用cint global 100; // 全局变量 void func(void) { int local 10; // 局部变量 printf(%d\n, global); // ✅ 能用全局 } int main(void) { printf(%d\n, local); // ❌ 错误main里看不到local printf(%d\n, global); // ✅ 能用全局 return 0; }2. 生存周期什么时候存在局部变量执行到定义时开辟空间出了作用域就回收全局变量程序启动时就存在程序结束才回收四、变量的存储类型1. auto自动型默认cauto int a; // 等价于 int a;存在栈区不初始化就是随机值进入作用域时开辟退出时回收2. register寄存器存储cregister int a;尽量放在CPU寄存器里更快如果寄存器满了等价于auto3. extern外部声明声明变量或函数是在别处定义的多文件编程时用。4. static静态存储作用域受限只能在当前文件里用防止多文件命名冲突生命周期延长程序启动时分配程序结束才回收默认初始化为0cstatic int count; // 默认值为0 static void helper(void) { } // 只能在当前文件用五、函数传参方式值传递C语言默认方式cvoid swap(int a, int b) { int tmp a; a b; b tmp; } int main(void) { int x 10, y 20; swap(x, y); printf(x%d, y%d\n, x, y); // 还是 10, 20没变 return 0; }值传递的本质是拷贝——实参把自己的值复制一份给形参形参怎么改都不影响实参。六、今日总结今天学了二维字符数组和函数核心要点如下二维字符数组本质是字符串数组每一行存一个字符串定义char 数组名[行数][列数]初始化char str[3][32] {hello, world, C};访问str[i]代表第i个字符串str[i][j]代表第i个字符串的第j个字符输入输出scanf(%s, str[i])不用加函数部分函数三要素定义写逻辑、调用用逻辑、声明告诉编译器作用域局部变量只在当前{}内有效全局变量整个文件都能用生存周期局部变量随函数调用而生、随函数结束而灭全局变量随程序static关键字让变量生命周期延长到程序结束同时限制作用域在当前文件值传递C语言传参是拷贝形参改变不影响实参今日感悟以前所有逻辑都堆在main函数里写着写着很容易看混。把功能拆成一个个小函数之后main函数变成了目录一眼就能看懂整个程序的流程简洁易懂。

相关新闻

FineBI认证高效备考指南:从题库到实战能力的进阶之路

FineBI认证高效备考指南:从题库到实战能力的进阶之路

1. 项目概述:从“题库”到“能力认证”的深度认知最近在社区和群里,看到不少朋友在讨论FineBI认证的题库和答案。这让我想起了自己当年备考各类技术认证的经历,从最初的“背题求过”,到后来真正理解工具、形成自己的分析思维&…

2026/7/30 5:37:54阅读更多 →
Sharp-dumpkey:一键提取微信数据库密钥的终极免费工具

Sharp-dumpkey:一键提取微信数据库密钥的终极免费工具

Sharp-dumpkey:一键提取微信数据库密钥的终极免费工具 【免费下载链接】Sharp-dumpkey 基于C#实现的获取微信数据库密钥的小工具 项目地址: https://gitcode.com/gh_mirrors/sh/Sharp-dumpkey 你是否曾因为换手机时微信聊天记录无法迁移而烦恼?或…

2026/7/30 5:35:53阅读更多 →
Java+Vue全栈超市管理系统设计与实现

Java+Vue全栈超市管理系统设计与实现

1. 超市管理系统概述:JavaVue全栈解决方案作为一名经历过多个零售系统开发的老手,我深知一个高效的超市管理系统需要同时满足收银效率、库存精准和数据分析三大核心需求。这次分享的JavaVue全栈方案,正是我在实际项目中验证过的成熟架构。这个…

2026/7/30 5:35:53阅读更多 →
用 Claude 做 Graph Engineering:从 0 到 graph 架构师的 14 步路线图(完整课程)

用 Claude 做 Graph Engineering:从 0 到 graph 架构师的 14 步路线图(完整课程)

大多数人试着搭建多步 agent 时,最后都做成了一条直线:步骤一、步骤二、步骤三——每一步都礼貌地等上一步做完才开始。 十个人里有九个会发现:这些步骤里有一半根本不需要等待。 它们不路由(route),不分…

2026/7/30 6:52:42阅读更多 →
FastReport.OpenSource:免费开源的.NET报表生成终极指南

FastReport.OpenSource:免费开源的.NET报表生成终极指南

FastReport.OpenSource:免费开源的.NET报表生成终极指南 【免费下载链接】FastReport Free Open Source Reporting tool for .NET6/.NET Core/.NET Framework that helps your application generate document-like reports 项目地址: https://gitcode.com/gh_mirr…

2026/7/30 6:52:42阅读更多 →
深入解析Cpp2IL:破解IL2CPP逆向工程的核心原理与实战应用

深入解析Cpp2IL:破解IL2CPP逆向工程的核心原理与实战应用

1. 项目概述:为什么我们需要深入IL2CPP的“心脏”?如果你是一名Unity游戏开发者、安全研究员,或者是对移动应用底层机制充满好奇的技术爱好者,那么“IL2CPP”这个词对你来说一定不陌生。它早已不是Unity引擎里一个可选的、边缘的编…

2026/7/30 6:52:42阅读更多 →
终极指南:用Python脚本自动化剪映视频剪辑的完整解决方案

终极指南:用Python脚本自动化剪映视频剪辑的完整解决方案

终极指南:用Python脚本自动化剪映视频剪辑的完整解决方案 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 你是否厌倦了在剪映中重复执行相同的视频编辑操作?是…

2026/7/30 6:52:42阅读更多 →
STM32 DMA技术详解:从原理到实战,实现高效数据传输与性能优化

STM32 DMA技术详解:从原理到实战,实现高效数据传输与性能优化

1. 项目概述:为什么DMA是STM32性能提升的关键如果你正在用STM32做项目,尤其是涉及到大量数据传输的场景,比如采集传感器数据、驱动屏幕、处理音频或者高速通信,那你一定遇到过CPU被数据搬运工作“累趴下”的情况。CPU吭哧吭哧地从…

2026/7/30 6:52:42阅读更多 →
平台电商转型首选!澜驰Java多租户SaaS商城,赋能多商户规模化运营

平台电商转型首选!澜驰Java多租户SaaS商城,赋能多商户规模化运营

在产业数字化、渠道规模化的发展趋势下,单一品牌自营商城已经难以适配平台型企业、供应链企业、产业园区、软件服务商的发展需求。越来越多企业开始布局多商户入驻、多品牌运营、多渠道变现的平台型电商模式,而搭建平台商城的核心关键,就是选…

2026/7/30 6:50:42阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →