当前位置: 首页 > news >正文

阿C学嵌入式---C语言入门---函数

一、函数本质与设计思想

函数是 C 语言的基本执行单元,核心作用是代码封装、复用、模块化,遵循单一职责原则;函数不调用不执行,调用时入栈,执行完毕出栈,局部资源自动释放。

二、函数声明、定义与调用

  1. 声明:仅告知编译器函数名、返回值、参数,无函数体,可多次声明。
  2. 定义:函数具体实现,包含函数体,只能定义一次。
  3. 调用:实参传递给形参,程序跳转执行,执行后返回调用处。

三、参数传递(核心考点)

  1. 值传递:C 语言唯一传递方式,形参是实参副本,函数内修改不影响实参。
  2. 地址 / 指针传递:传递变量地址,通过指针解引用可修改实参,常用于大数据传递、输出型参数。
  3. 数组传参:数组名退化为指针,丢失长度信息,必须额外传递数组长度
  4. 二维数组传参char str[][N]对应行指针char (*str)[N];指针数组char *str[]对应二级指针char **str

四、返回值规范

  1. 可返回普通变量、指针、结构体,禁止返回局部变量 / 局部数组地址(栈内存失效)。
  2. 返回数组需搭配:static静态存储、malloc动态内存、结构体封装(数据 + 长度)。
  3. 动态内存遵循谁申请、谁释放原则,调用方接收指针后负责free,防止内存泄漏。

五、作用域与生命周期

  1. 局部变量:栈区,函数内有效,执行结束自动销毁。
  2. 全局变量:数据段,整个程序有效,慎用,易引发耦合。
  3. static 变量:静态存储区,仅初始化一次,生命周期贯穿程序,作用域受限。
  4. static 函数:仅当前文件可见,用于模块化封装,避免命名冲突。

六、指针函数与函数指针

  1. 指针函数:返回指针的函数,int *fun(),常用于返回数组、字符串。
  2. 函数指针:指向函数的指针,int (*p)(),用于回调、函数表、动态分发。

七、递归函数

  1. 自身调用自身,必须有明确终止条件,否则栈溢出。
  2. 适用于分治、遍历场景,效率低于循环,慎用深度递归。

八、工程与面试避坑

  1. 数组传参必带长度,禁止依赖sizeof获取数组大小。
  2. 指针参数必须判空,防止空指针解引用崩溃。
  3. 字符串操作以\0为结束标志,strcpy需手动保证目标空间充足。
  4. 动态内存malloc/callocfree配对使用,释放后置空避免野指针。
  5. 函数设计保持简洁,参数不宜过多,职责单一,提升可读性与可维护性。

九、核心总结

函数是 C 语言模块化编程的基石,参数传递、内存管理、指针应用是核心;工程开发注重安全、规范、可复用,面试重点考察传参机制、指针理解、内存安全与边界处理。

http://www.jsqmd.com/news/647664/

相关文章:

  • 运维人破局指南|告别背锅运维,转行网络安全,薪资直接翻番(零弯路路径)
  • 基于 Spring Boot + Vue 的宠物健康管理与社交分享系统
  • Langflow:这个拖拽式AI工作流神器正在颠覆传统编程
  • Matlab新手必看:你的‘函数未定义’报错,90%是因为没搞懂‘当前文件夹’和‘搜索路径’
  • 低空导航AI计算单元功率MOSFET选型方案:高效可靠电源与接口驱动系统适配指南
  • 图表即实力|虎贲等考 AI 科研绘图:让学术可视化告别熬夜,直达期刊标准
  • 品牌设计没头绪?厂家帮你搞定!
  • 未来5年最“钱”景岗位!AI产品经理3步速成,别再观望!
  • Addressables增量更新全攻略:从Static资源分组到动态标签检测的完整工作流
  • 如何通过Vagrant快速建库_自动化虚拟机Oracle部署方案
  • 个人小记录
  • 零基础复盘:从命令行运行 Python 文件失败到成功,我踩过的 5 个坑
  • 开发者必读:批判性思维的7个训练法
  • MOS管体二极管与寄生二极管的特性及实际应用解析
  • AUTOSAR从入门到精通-【自动驾驶】自动驾驶激光雷达点云畸变的成因与解决方案
  • 2025-2026年国际美白防晒霜品牌推荐:TOP10口碑产品评测对比领先敏感肌温和不刺激泛红 - 品牌推荐
  • 2025-2026年美白防晒霜品牌推荐:十款口碑产品评测对比领先户外运动防水防汗 - 品牌推荐
  • AI地铁轻轨门控系统功率MOSFET选型方案——高可靠、快速响应与长寿命驱动系统设计指南
  • 2026届必备的AI学术工具实测分析
  • Cesium Terrain Builder深度解析:构建专业级3D地形服务的完整方案
  • fgsdfsaddsafafsadsadfafsdsdfasfadsadfasfd
  • 机器人测试,从核心技术快速入门
  • WinForm中GDI+图像处理与资源释放的最佳实践
  • 新手也能看懂的CTF解题思路:从ISCTF一道MISC题看Python打包exe的逆向技巧
  • 爱格定制亲测:实践案例分享,效果惊艳!
  • Spring整合Mybatis详解
  • 告别手敲!用CodeMirror 6给你的Web编辑器加上智能提示(附自定义补全源实战)
  • Redis怎样通过频道划分不同的日志级别
  • 情绪智商(EQ)在代码世界的重要性:软件测试从业者的专业视角
  • AI 术语入门指南