学嵌入式和C语言编程 | 学习日记Day10:函数、函数的调用,值传递、递归、一维整型数组做函数参数
前言今天学习 C 语言函数函数是实现代码模块化最重要的工具。使用函数可以降低程序耦合度减少重复代码提高代码复用能力。在嵌入式项目开发中我们会把传感器读取、外设驱动、数据处理全部封装成函数方便调用与维护。本次学习内容包含函数定义、调用、声明、值传递、递归调用以及数组作为函数参数的传参规则。一、函数基础函数优点降低程序的耦合性关联度减少重复代码让程序模块化增强代码复用性。1. 函数定义格式c返回值类型 函数名(形参表){函数体;}返回值可以是 int、char 等基础数据类型也可以是构造数据类型。用来返回函数最终运算结果。void空类型函数执行完毕不需要返回任何结果时使用 void 作为返回值。函数名标识符遵守标识符命名规则尽量见名知意。习惯以 “动词”“宾语” 命名例如get_max_val();获取最大值。形参表函数执行过程中需要用到的条件。格式数据类型 形参名, 数据类型 形参名, 数据类型 形参名 …注意当函数有明确返回值类型必须写return如果不写 return系统返回内存里随机垃圾值。如果返回值为 void可以不写 return也可以写return;。2. 函数调用格式c函数名(实参表);实参传递给函数的实际条件可以是常量、变量、表达式。实参要求实参的个数和形参的个数必须一一对应。实参和形参的数据类型要一致或者相互兼容。概念区分主调函数发起调用的函数被调函数被别人调用的函数函数执行规则函数不被调用则不会执行调用几次就执行几次。实参和形参名字可以相同也可以不同。3. 函数的声明出现场景被调函数写在主调函数后面编译器报implicit declaration隐式声明警告。两种声明方式在主调函数前面进行函数声明返回值类型 函数名(形参表);多文件开发其他文件想要调用本文件函数也需要做函数声明。4. 函数调用过程栈空间工作机制保护现场函数被调用时把调用位置的下一条指令地址保存到栈空间栈遵循先进后出。恢复现场被调函数执行结束从栈取出保存的地址CPU 回到调用处继续执行后续代码。二、函数的传参 —— 值传递值传递实参向形参做拷贝实参、形参拥有各自独立内存空间。值传递核心特点单向传递只把实参拷贝给形参。在被调函数内部修改形参不会影响主调函数里面原来的实参变量。项目值传递说明内存空间实参、形参各自独立内存数据流向只能实参 → 形参单向拷贝修改效果被调函数修改形参主调函数变量不受影响三、函数的递归调用定义函数直接或者间接调用自身。本质属于循环的一种实现方式。重点规则递归必须设置递归出口没有出口就会变成死循环造成栈溢出。缺点递归调用系统资源开销大于普通循环消耗栈内存嵌入式开发不建议深度递归。简单递归示例逻辑求累加Plain Textmain() → get_sum(5) → get_sum(4) → get_sum(3) → get_sum(2) → get_sum(1)递归出口get_sum(5) → get_sum(4)1 → get_sum(3)1 → get_sum(2)1 → get_sum(1)1→return 1四、一维数组作为函数参数数组名本质是数组首元素的地址。1. 传参书写格式函数定义c返回值类型 函数名(int 数组名[], int len){//函数内部数组使用方式和外部完全一样}函数调用c函数名(数组名,数组长度);2. 数组做函数参数四条注意点形参书写格式int a[]方括号内常量可以写也可以省略。数组名传参传递的不是全部数组拷贝传递的是数组首元素地址形参本质接收一个起始地址。只传数组名无法得到数组长度必须额外把数组长度 len 当做参数传入函数。数组作为函数参数传递给被调函数后函数内部的使用方法和外部的使用方法一样除了sizeof数组名。值传递 vs 数组传参对比传参方式传递内容修改是否影响外部原始数据普通变量值传递变量值拷贝不影响外部变量数组名作为参数数组首元素地址函数内修改数组外部数组同步改变今日学习总结函数三要素返回值、函数名、形参列表void 代表无返回值有返回值的函数必须使用 return。实参与形参个数、类型需要匹配值传递是单向拷贝修改形参不会改变主调函数变量。函数写在调用之后必须提前做函数声明消除隐式声明警告。函数调用依靠栈空间完成保护现场、恢复现场栈遵循先进后出。递归就是函数调用自己一定要写递归出口递归栈开销大嵌入式尽量少用深度递归。数组名做函数参数传递的是首元素地址不是完整数组拷贝必须额外传入数组长度函数内部修改数组外部原始数组会被同步修改。工程实践嵌入式开发中传感器处理、外设驱动全部封装为函数提升代码可读性、复用性。

相关新闻

【每日夸夸】刷题Day007

【每日夸夸】刷题Day007

今天下班的时候,看了C语言编程规范.pdf,学到了怎么注释?1.注释的时候,想清楚what做什么?为什么要这么做?不用写怎么做。想清楚为什么要做?就像D工让我喊大家,说明书发布会喊了太多人…

2026/10/15 23:08:12 阅读更多 →
2026年AI大模型开发实战:从Prompt工程到RAG系统全流程指南

2026年AI大模型开发实战:从Prompt工程到RAG系统全流程指南

随着AI技术的快速发展,大模型已成为开发者必须掌握的核心技能。但在实际学习过程中,很多同学面临资料零散、实战案例缺乏、环境配置复杂等问题。本文基于2026年最新技术趋势,通过一套完整的实操指南,带你系统掌握AI大模型开发全流…

2026/10/15 23:09:49 阅读更多 →
Gemini API托管智能体进阶:后台任务与远程MCP集成实战

Gemini API托管智能体进阶:后台任务与远程MCP集成实战

1. 项目概述:从单次对话到持续智能的跃迁最近在折腾Gemini API的Managed Agents功能,发现它远不止是官方文档里展示的“一问一答”那么简单。很多开发者拿到API Key后,可能只是简单调用一下generateContent,体验一下大模型的文本生…

2026/10/15 16:29:15 阅读更多 →

最新新闻

Claude代码模板:开箱即用的AI编程脚手架

Claude代码模板:开箱即用的AI编程脚手架

1. 这不是另一个“Claude CLI”:为什么 claude-code-templates 是开发者真正需要的脚手架 你有没有过这样的经历:刚想用 Claude 写一段 Python 数据清洗脚本,打开编辑器,光是搭环境就花了二十分钟——先查 pip install 还是 …

2026/10/17 5:27:25 阅读更多 →
H5扫码开发实战:jsQR与html5-qrcode选型、参数调优与避坑指南

H5扫码开发实战:jsQR与html5-qrcode选型、参数调优与避坑指南

简介:这是一份面向前端与跨端开发者的H5扫码功能实现资源,围绕jsQR与html5-qrcode两个JavaScript库展开,解决浏览器端无需安装插件即可读取二维码的问题,并兼顾uni-app在H5环境下的集成需求。资源包共43个文件,约488KB…

2026/10/17 5:27:25 阅读更多 →
WinDbg分析dump文件实战:从崩溃定位到托管内存排查

WinDbg分析dump文件实战:从崩溃定位到托管内存排查

前两天线上有个服务突然内存暴涨,同事用任务管理器抓了一个内存转储扔给我,丢下一句“帮我看看是不是泄漏”。我打开WinDbg加载这个.dmp文件,先敲了一条!analyze -v,然后盯着输出的栈回溯看了五分钟,发现根本不是托管内…

2026/10/17 5:27:25 阅读更多 →
JMX未授权访问漏洞自查与修复:四层防线加固指南

JMX未授权访问漏洞自查与修复:四层防线加固指南

Java的JMX(Java Management Extensions)作为运行期监控和管理的标准机制,几乎每个像样一点的Java服务都在用。但正因为太“标配”了,很多人只是随手在启动脚本里加了一行-Dcom.sun.management.jmxremote.port9010,却完…

2026/10/17 5:27:25 阅读更多 →
qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记

qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记

qui:把 3 台 qBittorrent 实例装进一个 WebUI 的实操笔记 【免费下载链接】qui A fast, single-binary qBittorrent web UI: manage multiple instances, automate torrent workflows, and cross-seed across trackers. 项目地址: https://gitcode.com/GitHub_Tre…

2026/10/17 5:27:25 阅读更多 →
SQL添加数据全攻略:INSERT、批量插入与冲突处理

SQL添加数据全攻略:INSERT、批量插入与冲突处理

前阵子有个小组的后台接口频繁报警,查了半天发现是日志表的数据写入方式太原始——一条一条循环INSERT,压测一上来直接拖垮了数据库连接池。那一刻我又想起刚学SQL时的自己:以为“添加数据”就是写一句INSERT INTO ... VALUES就完事了。实际上…

2026/10/17 5:26:25 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/16 14:23:36 阅读更多 →