Days 9 函数初学
一、为什么要学函数刚学 C 语言的时候所有代码全堆在main里写重复功能要复制粘贴一大段代码又乱又难改。函数就是用来解决这个问题的 函数两大好处代码复用同一个功能只写一次想用直接调用不用反复复制代码模块化拆分把复杂程序拆成一个个独立小功能逻辑清晰找 bug、改代码都很方便。整个 C 程序必须有且只有一个main函数程序从main开始执行其他都是我们自己写的自定义函数。二、函数完整三要素定义、调用、声明1. 函数定义写函数本体实现功能标准语法拆解每一部分返回值类型函数执行完给外面返回的数据类型没有返回值写void不用写return函数名命名规则和变量一样只能字母、数字、下划线不能数字开头尽量见名知意比如is_leap_year判断闰年形参形式参数函数接收外部数据的 “占位符”只有调用函数时才会分配内存函数结束直接销毁函数体{}写具体逻辑return结束函数把结果传给调用处void函数可以省略 return。举个简单例子判断闰年函数2. 函数调用使用写好的函数语法函数名(实参1, 实参2);实参实际参数调用时真实传进去的数据可以是常量、变量、表达式规则实参的个数、顺序、数据类型必须和形参完全对应C 语言只有值传递只是把实参的值拷贝一份给形参函数内部修改形参完全不会影响外面的实参。调用上面闰年函数这里main是主调函数is_leap_year是被调函数。3. 函数声明函数原型解决编译报错C 语言代码从上往下逐行编译如果函数定义写在 main 函数下方编译器读到调用代码时找不到函数直接报错。 解决办法在 main 上方提前声明函数告诉编译器这个函数存在。声明格式去掉函数体末尾加分号完整带声明示例小总结定义在 main 上方不用声明定义在 main 下方必须提前声明。三、变量的作用域 生命周期函数配套重点1. 局部变量定义在函数内部、大括号{}里的变量就是局部变量作用域只能在当前大括号内使用外面访问不到存储位置栈区生命周期进入代码块分配内存执行完大括号直接销毁默认存储类型auto可以省略不写未初始化值是随机垃圾值一定要手动初始化。2. 全局变量定义在所有函数外面的变量作用域整个.c文件所有函数都能访问存储位置静态数据区生命周期程序运行全程存在程序结束才销毁未初始化默认自动赋值 0缺点所有函数都能修改容易乱改数据尽量少用。四、四种变量存储类型存储位置 / 特性1. auto自动变量局部默认仅局部变量可用存栈区函数结束内存释放不初始化 随机值。2. register寄存器变量局部变量专用优先存 CPU 寄存器读取更快寄存器满了自动降级为 auto 栈变量不能取地址。3. static静态变量分两种1static 修饰局部变量原本局部变量存栈static 后放到静态数据区生命周期第一次调用函数时初始化一次之后函数调用不会重新初始化程序结束才销毁作用域不变还是只能当前函数内使用不初始化默认 0适合计数场景。示例统计函数调用次数2static 修饰全局变量 / 函数限制作用域只能在当前.c文件使用其他文件无法访问避免多文件命名冲突。4. extern外部声明只用来声明变量 / 函数不分配内存告诉编译器这个变量 / 函数定义在别的文件或文件下方。五、函数传参核心值传递C 语言所有函数传参都是单向值传递调用函数时把实参的值复制一份给形参实参、形参是两块独立内存互不干扰在函数内部修改形参外部实参完全不会变化。错误示例交换两个数字失败原因只是拷贝了 a、b 的值给 x、y函数内交换的只是副本本体没变。六、课堂作业实战封装函数练习作业 1封装函数传入年月日返回当年第几天思路封装闰年判断函数is_leap_year封装get_dayofyear(int y,int m,int d)累加前面月份总天数加上当日二月天数根据闰年判断是 28/29 天。作业 2字符串倒置函数封装不使用库函数七、新手踩坑总结函数定义在 main 下方忘记写函数声明编译报错return 返回值和函数定义的返回类型不一致会隐式转换丢失数据局部变量不初始化直接使用读取随机垃圾值static 局部变量误以为每次调用都会重新初始化传参误以为修改形参能改变实参不清楚 C 语言只有值传递函数名和库函数重名比如 printf造成程序异常void 函数写 return 数字语法错误。八、学习感悟函数是 C 语言从 “简单代码” 进阶 “模块化程序” 的分水岭学会封装函数之后写复杂逻辑清晰很多。尤其是 static 静态局部变量、值传递这两个点一开始很难理解多写几次计数、交换的练习就能吃透。后续学指针之后还能解决 “值传递无法修改外部变量” 的问题继续加油

相关新闻

万能代码模板:30行实现核心功能的高效开发

万能代码模板:30行实现核心功能的高效开发

1. 项目概述:为什么我们需要万能代码模板?在编程领域,我们经常会遇到一些重复性的功能需求。比如数据验证、文件操作、网络请求等基础功能,几乎每个项目都会用到。每次从零开始写这些代码不仅效率低下,还容易引入错误。…

2026/7/30 6:30:38阅读更多 →
Unity VR投掷游戏开发实战:SteamVR集成与桌面模拟模式详解

Unity VR投掷游戏开发实战:SteamVR集成与桌面模拟模式详解

1. 项目概述与核心价值最近在整理过往项目资料时,翻出了一个基于Unity 2021 LTS开发的VR投掷小游戏完整源码包。这个项目麻雀虽小,五脏俱全,它不仅完整实现了核心的投掷玩法,更关键的是,它从一开始就设计为支持SteamVR…

2026/7/30 6:30:38阅读更多 →
vDisk在线考试系统网络异常分析与优化策略

vDisk在线考试系统网络异常分析与优化策略

1. vDisk考试环境网络异常问题解析在基于vDisk技术的在线考试环境中,网络连接质量直接影响着考试系统的稳定性和考生体验。当网络出现异常波动时,可能会引发一系列连锁反应,从简单的操作延迟到严重的考试中断。作为参与过多个在线考试系统部署…

2026/7/30 6:30:38阅读更多 →
WebBuilder 开发规范:Component 组件 autoScroll 滚动属性编码标准

WebBuilder 开发规范:Component 组件 autoScroll 滚动属性编码标准

1 文档目的 统一所有项目页面滚动交互实现方案,标准化Wb.Component组件内容溢出处理逻辑。规避项目内实现方案不统一、随意自定义 CSS 样式、浏览器兼容异常等问题,提升交付页面标准化程度,降低后期 BUG 修复与系统维护成本。 适用范围&…

2026/7/30 7:42:58阅读更多 →
提示词不是写出来,而是“跑出来”的:分步骤执行的实时监控仪表盘搭建指南(含Prometheus+LangSmith开源配置)

提示词不是写出来,而是“跑出来”的:分步骤执行的实时监控仪表盘搭建指南(含Prometheus+LangSmith开源配置)

更多请点击: https://codechina.net 第一章:提示词不是写出来,而是“跑出来”的本质认知 提示词工程的本质并非静态撰写,而是一个动态迭代、持续验证与反馈驱动的探索过程。它更接近于“运行时生成”——在模型响应、用户反馈、上…

2026/7/30 7:42:58阅读更多 →
C++引用深度解析:从别名到现代编程核心机制

C++引用深度解析:从别名到现代编程核心机制

1. 从“别名”到“利器”:重新认识C引用在C的世界里,引用(Reference)这个概念,对于很多初学者来说,第一印象往往是“变量的别名”。这个定义简洁明了,但如果你仅仅停留在这个层面,那…

2026/7/30 7:42:58阅读更多 →
# 鸿蒙 HarmonyOS 应用开发实战(第33期)|喝水提醒(Water Reminder)— 可视化水杯与进度动画

# 鸿蒙 HarmonyOS 应用开发实战(第33期)|喝水提醒(Water Reminder)— 可视化水杯与进度动画

一、应用概述 喝水提醒(Water Reminder) 是一款健康辅助类应用,帮助用户记录每日饮水量,并以可视化水杯的形式直观展示饮水进度。用户每点击一次「喝一杯」按钮,水杯中的水位就会上升一格,同时显示累计饮水…

2026/7/30 7:42:58阅读更多 →
Spring Boot集成Google Authenticator实现两步验证:从原理到实战

Spring Boot集成Google Authenticator实现两步验证:从原理到实战

1. 项目概述:为什么你的Spring Boot应用需要两步验证?最近在给一个内部管理系统做安全加固,客户提了个很实在的要求:登录时除了密码,能不能再加一道锁?这个需求背后,是大家对账号安全越来越高的…

2026/7/30 7:42:58阅读更多 →
Android RelativeLayout核心机制与实战优化指南

Android RelativeLayout核心机制与实战优化指南

1. 项目概述:为什么RelativeLayout依然是Android布局的“定海神针”? 在Android开发的世界里,布局就像盖房子的图纸,决定了每个UI组件(砖瓦)应该放在哪里。从早期的LinearLayout、RelativeLayout&#xff0…

2026/7/30 7:40:58阅读更多 →
覆盖国产 + 海外 + 开源模型,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阅读更多 →