尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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 静态局部变量、值传递这两个点一开始很难理解多写几次计数、交换的练习就能吃透。后续学指针之后还能解决 “值传递无法修改外部变量” 的问题继续加油
RELATED

相关推荐

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

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

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

📅 2026/10/6 21:07:46
Unity VR投掷游戏开发实战:SteamVR集成与桌面模拟模式详解

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

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

📅 2026/10/15 5:14:49
Instagram多账号运营的数据标准化与智能发布策略

Instagram多账号运营的数据标准化与智能发布策略

1. 多账号运营的常见困境与根源分析运营多个Instagram账号时,内容管理混乱是90%的运营者都会遇到的典型问题。我经手过的跨境电商业态中,平均每个团队同时管理3-5个不同定位的IG账号,但超过60%的运营负责人反馈:账号越多&#xff…

📅 2026/10/8 1:54:52
MORE NEWS

更多资讯

📰

华城电工证好考吗?良心建议告诉你怎么避坑

华城电工证好考吗?良心建议告诉你怎么避坑 你是不是正愁不知道去哪报名,怕被中介坑?别急,今天我就从一个从业多年的角度,给你讲讲 华城电工证好考吗 这件事,顺便告诉你怎么避开那些坑,省心又省事地把证拿到手。…

📰

郧西电工证办理地点怎么网上查询?工地太忙根本没时间复习考试

郧西电工证办理地点怎么网上查询?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多电工师傅的真实写照。尤其是现在工程项目工期紧、任务重,很多一线电工师傅连休息时间都紧张,更别说抽空复习考试内容了。而如果你正准备报考…

📰

工地太忙根本没时间复习考试?想考电工证要怎么问,良心建议在这了

工地太忙根本没时间复习考试?想考电工证要怎么问,良心建议在这了 工地太忙根本没时间复习考试,你不是一个人。每天在钢筋水泥间穿梭,手上的活儿一天到晚不停,晚上回到宿舍已经精疲力尽,哪还有心思看书?可要是不把电工证考下来,以后在工地上干活儿都得…

📰

760元考的电工证值不值得考 外省证能转回来吗

760元考的电工证值不值得考 外省证能转回来吗 之前考的证在外省能不能转过来?这可能是很多在外地打工的电工朋友最关心的问题。特别是像你这种刚毕业的洛阳应届工程类毕业生,手上拿着760元考的电工证,但又担心这证到底有没有用, 值不值得考…

📰

办电工证贵州哪里有 一位在广东考的电工证真实经历告诉你怎么转过来

办电工证贵州哪里有 一位在广东考的电工证真实经历告诉你怎么转过来 之前考的证在外省能不能转过来?我之前在广东打工,考了低压电工证,后来回到贵州发展,想把证转过来,结果跑了好几趟,才知道原来流程这么复杂。今天就根据我自己在贵州办电工证的经历,…

📰

电工证复审2023怎么报名?2026河南最新政策你知道吗?

电工证复审2023怎么报名?2026河南最新政策你知道吗? 不知道去哪报名怕被中介坑?别急,你不是一个人。2026河南最新政策已经落地,很多小伙伴都在为电工证复审犯愁,尤其是商丘的水利工程从业者,既要忙于项目,又要抽时间处理证件复审的事儿。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬