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

第八篇:函数

说明:函数的学习分为库函数和自定义函,但我们学习的重点是自定义函数,所以库函数本篇文章不作说明,感兴趣的朋友们可以自行搜索资料学习

一.自定义函数

1.函数的概念:完成某个特定任务的代码就叫函数。

2.函数的创建:ret_type fun_name( 形参)

{

函数体;

}

其中,ret_type是函数返回类型(返回的值是整型还是字符型还是浮点型),fun_name是函数的名称(名称尽量起的有意义,方便后续管理),形参就是函数的参数(用数学函数类比,函数y=kx+b,里面的y和x就是函数的参数)参数可以没有(没有参数那括号内就写void,表示没有参数。如果有参数,必须交代参数的类型,名字和个数),函数体就是这个函数要完成的计算过程。

对函数的理解:可以把函数想象成一个工厂。想让工厂运作起来就需要原材料,这个原材料就是形参(也叫形式参数)。把原材料送给工厂后,工厂要进行加工,加工的过程就可以想象成函数完成计算的过程,此时工厂就是函数体。

举例:写一个加法函数(应用函数时,应先对函数进行定义,再调用函数)

最上面的int 就是函数的类型,add是函数的名称,x和y是形参(形参要有类型,名字和个数)。大括号括起来的就是函数体,就是函数要具体计算的部分,主程序里面的 c = add(a,b) 就是对函数的调用。

二.形参与实参

1.形参:在对函数进行定义时使用的参数就是形参,也叫形式参数,就比如上图中的 x ,y。若只定义函数而不调用函数,形参只是形式上存在,不会向内存申请空间,也不会真实存在,所以叫它形参。

2.实参:真实传递给函数的参数就叫实参,也叫实际参数(在调用函数时使用的参数),就比如上图中的 a 和 b 。

三.return语句

注意事项:(1)return后可以是数值或表达式,如果是表达式,则系统会先执行表达式,再返回表达式的值

(2)return后也可以什么都没有,直接写成return; ,这种写法适合返回类型是void的情况

(3)return执行后,函数就彻底返回,后面的代码就不再执行

(4)return返回值类型如果与函数返回值类型不一样,则return语句的返回值类型会被转换成函数的返回值类型

(5)若函数中有if语句,则需要保证每一种情况都有return返回

(6)如果函数的返回类型不写,则默认为int类型

(7)函数有返回值类型,而return没有,则函数返回值是未知的

四.数组作为函数

有时数据过多,且不易用循环处理时,可以将数组作为函数处理。例如:写一个函数,将整型数组中的所有函数全部设置为 -1 ,再写一个函数打印出来。

分析:本质上是对数组的操作数组元素的访问可以用下标实现(具体内容见小编上篇文章),找出对应元素后,将其设置为 -1 即可。因为是将所有数组元素设置为 -1 ,所以还要用到循环。最后再写一个函数,再用循环的方法打印出来即可。代码如下:

五.嵌套调用与链式访问

1.嵌套调用:函数之间的相互调用就叫嵌套调用。就像乐高积木一样,一块积木需要借助另一块积木堆积上去,最终组成一个完整的项目。例如:计算某年某月有多少天。

分析:年份分为闰年和不是闰年。如果是闰年,二月份有28天,否则有29天。然后还要将计算结果输出到屏幕上,所以要写两个函数,一个函数判断是否为闰年,一个函数将计算结果输出到屏幕上。代码如下:

2.链式访问

(1)概述:将一个函数的返回值作为另一个函数的参数

printf函数的返回值的读取的字符个数。在上图中,最右面的printf读取到4和3两个字符,所以中间的printf函数的参数就是2,中间的printf读取到2,一个字符,所以它的返回值就是1。最左面的printf的参数就是1。从右向左依次打印,结果为4321。

六.static和extern

在介绍这两个概念前,先来说一下作用域和生命周期。

1.作用域:限定代码名字可用性的代码范围就是这个名字的作用域。可以用局部变量类比理解

2.生命周期:变量从创建到销毁之间的一个时间段就叫生命周期;局部变量的生命周期是从进入作用域变量创建到出作用域,全局变量的生命周期是整个程序的生命周期

3.static:用于修饰全局变量,局部变量和函数

(1)修饰全局变量:会使得函数只能在本源文件中使用,在其他源文件中不能使用

(2)修饰局部变量:会改变和局部变量的生命周期,使得其生命周期和整个程序的生命周期一致,但局部变量的作用域不变

4.extern:用于声明外部符号,若全局符号在A文件中定义,想在B文件中使用,则可以在B文件中使用extern进行声明。

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

相关文章:

  • 如何快速实现Nintendo Switch游戏文件的高效安装与管理:Awoo Installer完整指南
  • 3分钟解锁网易云音乐:用ncmdumpGUI轻松将ncm转换为MP3
  • 标准IO介绍 文件IO介绍及缓冲区概念
  • av1编码--超级块、编码块概念
  • Unity 2022+ 安卓打包进阶:深度定制你的Gradle配置(从模板文件到实战避坑)
  • 如何轻松突破30+文档平台限制:免费下载工具kill-doc完整指南
  • 使用Taotoken后API调用延迟与稳定性体验分享
  • GraphRAG:知识图谱赋能生成式AI,突破传统检索局限,实现精准多跳推理与可解释生成!
  • 工业机器人网络安全漏洞披露现状与应对策略
  • Transformer 入门梳理:为什么大模型几乎都绕不开 Attention
  • 2026年武汉微电影制作公司TOP5权威排行榜,哪家才是你的心头好? - 企业推荐官
  • 从零封装:基于el-tree与穿梭框的树形穿梭组件实践
  • ARM架构系统寄存器与TLB维护指令详解
  • 从LSI到PMC:主流阵列卡管理工具实战指南与运维场景解析
  • 嵌入式Linux驱动开发——GPIO 子系统架构深度解析
  • 中小团队如何利用 Taotoken 统一管理多个项目的 AI 模型成本
  • 2026 AI学习机推荐来了:智能小初高机型深度解析 - 博客万
  • 如何快速部署nomic-embed-text-v1:文本嵌入模型的完整指南
  • 3分钟上手!XXMI启动器:免费开源的多游戏模组管理终极方案
  • 2026最新五家龙港市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 3分钟掌握DeTikZify:从草图到专业科学图表的AI魔法
  • 2026最新五家龙井市黄金回收白银回收铂金回收彩金回收店铺靠谱回收门店推荐TOP5排行榜及联系方式推荐 - 前途无量YY
  • 终极Switch游戏安装指南:Awoo Installer完整使用教程
  • 如何构建一个完全离线的Windows实时语音识别系统
  • Next.js集成Replicate AI:轮询与Webhooks实战及性能优化指南
  • 如何3分钟实现9大网盘下载加速:LinkSwift直链解析工具完全指南
  • 2026性价比高的GEO优化服务商推荐:性价比排名与选型指南 - 速递信息
  • 破解90%完成悖论:从认知偏差到系统实践的项目交付指南
  • 2026英语学习机推荐怎么选?中小学大屏护眼款全面盘点 - 博客万
  • Thorium浏览器终极指南:为什么这个基于Chromium的性能怪兽值得立即尝试?