学嵌入式和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/8/1 6:34:11 阅读更多 →
2026年AI大模型开发实战:从Prompt工程到RAG系统全流程指南

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

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

2026/8/1 6:34:11 阅读更多 →
Gemini API托管智能体进阶:后台任务与远程MCP集成实战

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

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

2026/8/1 6:33:11 阅读更多 →

最新新闻

VulnTarget-a 靶场通关记录:从外网打点到域控拿下

VulnTarget-a 靶场通关记录:从外网打点到域控拿下

下载地址: 链接:夸克网盘分享 提取码:7teN kali攻击机:192.168.20.130 靶机IP:centos/192.168.139.197 windows/ winserver/ 环境信息: 域控-win2019 账号:administrator 密码&#x…

2026/8/1 7:11:55 阅读更多 →
Java高并发编程核心:JUC原理、实战与性能优化指南

Java高并发编程核心:JUC原理、实战与性能优化指南

1. 项目概述:为什么JUC是Java高并发开发的基石如果你写过Java多线程程序,还在用synchronized和wait()/notify()那一套,那感觉就像开手动挡车在市区堵车——不是不行,就是累。而JUC(java.util.concurrent)包…

2026/8/1 7:11:55 阅读更多 →
DLSS Swapper终极指南:3分钟学会智能切换游戏DLSS版本,免费提升游戏性能

DLSS Swapper终极指南:3分钟学会智能切换游戏DLSS版本,免费提升游戏性能

DLSS Swapper终极指南:3分钟学会智能切换游戏DLSS版本,免费提升游戏性能 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏卡顿、帧率不稳定而烦恼吗?想提升游戏性能却不知道…

2026/8/1 7:11:55 阅读更多 →
沿用了40年的ChemDraw式绘图流程,如今InDraw 8.0正在重新定义,提效10倍

沿用了40年的ChemDraw式绘图流程,如今InDraw 8.0正在重新定义,提效10倍

过去40多年,化学结构绘制的核心逻辑并没有大变化:选择工具、绘制结构、调整细节。ChemDraw等软件培养了一代科研人员的使用习惯,但也留下了一个长期存在的问题——科研人员需要不断在画布和屏幕左侧和顶部工具栏之间反复移动。绘制一个结构式…

2026/8/1 7:11:55 阅读更多 →
文献综述不会写?用文飞AI从选题、文献匹配到大纲预览跑一遍

文献综述不会写?用文飞AI从选题、文献匹配到大纲预览跑一遍

文献综述不会写?用文飞AI从选题、文献匹配到大纲预览跑一遍 很多同学写文献综述时,最容易卡在两个地方:一是不知道从哪些研究方向切入,二是参考文献很多,却整理不出清晰的综述框架。这篇文章以文飞AI的文献综述功能为…

2026/8/1 7:11:55 阅读更多 →
DLSS Swapper终极指南:3步搞定游戏性能优化,免费提升帧率45%

DLSS Swapper终极指南:3步搞定游戏性能优化,免费提升帧率45%

DLSS Swapper终极指南:3步搞定游戏性能优化,免费提升帧率45% 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏卡顿、帧率不稳定而烦恼吗?想提升游戏性能却不知道如何操作&a…

2026/8/1 7:10:55 阅读更多 →

日新闻

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

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

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

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

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

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

2026/8/1 0:00:48 阅读更多 →
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/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/1 0:00:48 阅读更多 →
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/1 0:00:48 阅读更多 →