C语言从头学21——函数

       函数是一段可以重复执行的代码。这个定义比较抽象,实际上就是我们常说的子程序。函数的来源有两大块,一是C语言为我们提供的大量函数,如 printf(),它们被声明在各种头文件、库文件中,使用前我们使用 #include 命令把相应的文件包含到我们的程序中就可以使用;另一块是我们自己编写 (自定义) 的函数,本文重点学习这一块内容。
       我们要使用自定义的函数,前提是已经完成了这个函数的编写。我们编写函数的位置应在main()函数之前,也可以在 main() 函数前只完成函数的声明。函数内容可在其他地方实现。一个函数一般由返回值类型、函数名、参数和函数体构成。
1、返回值类型
      所谓返回值类型就是运行完这个函数它返回一个什么类型的值,也可以看做是这个函数的类型。比如,具有整数加法功能的函数它的返回值类型是 int 型;具有浮点数加法功能的函数它的返回值是 float 类型。当然,有时运行一个函数只是让它完成一些操作,不需要返回什么,这种无返回值的函数我们也给它一个类型 void;也就是说函数前面不能空着,总得写上点什么。
      返回值的之所以能够返回,需要有专门语句配合,凡有返回值的函数都有一条 return xxx; 语句将返回值返到函数外边。没有返回值的函数这条return语句可以省略,也可以只写一个return,表示无值可返。
2、函数名
       函数名称的命名规则可以参照前文曾介绍的变量的命名规则,函数名后边加上一对括号"()"是函数的标配。也可以这样理解,有名字后边跟着括号无论括号是否空着我们都可以把它看成函数。( 特例是有参宏,不过看成函数也无所谓,根本上说有参宏也是重复使用的代码)
3、参数
       函数要完成一些功能,有时需要外部传入一些值进去,这些值称为参数。参数写在函数名后边的括号中,参数前面需要写上参数是什么类型;这里的参数由于还没有确定的值,也不是确定的变量,所以也称为形参。参数可以是1个,也可以是多个,当然也可以没有。没有参数的函数括号内写上 void 或者干脆空着。
4、函数体
       函数体是函数具体功能的实现部分,这部分内容要用一对大括号括起来,标志着函数结尾的最后一个 "}" 后边无需写 ";" ,写了也不报错。在前面的文章中曾提到语句块的概念,语句块也是用大括号括起来,这个不冲突。只有最外边的一对大括号括起来的内容加上自身才能成为函数体。函数体内可以有许多对大括号,各自完成各自的功能,但一定要成对出现。
      举个例子:

   int myPlus(int x1,int x2) //返回值类型int,函数名myPlus,参数x1 x2(参数的类型也要写上){return x1+x2; //返回值语句;将x1+x2的和return到函数外边}

       再举个例子:

   void myPrint(void) //无返回值,无参数,函数名myPrint{printf("%d",12+13); //仅显示12+13的和,不返回什么,省略了return}

5、函数的声明
       我们把前面举的两个例子,原样放到一个C语言程序 main() 函数前面(即源码文件的顶层),就完成了这两个函数的声明并同时完成了两个函数的实现(实现就是把函数体代码写好)。
       也可以把函数的声明与函数的实现分开来写。比如:在main() 函数前面只写上"int myPlus(int x1,int x2);",如此就算完成了myPlus的声明;至于实现,可以放到程序的其它位置,靠前靠后都可以。但无论怎样,函数的声明与实现都不能写到其它函数的内部,包括不能写到main函数内部。
6、函数的调用
       函数的调用就是使用一个函数完成一定的操作,再强调一下,使用一个函数必须保证这个函数已经声明并完成了实现。调用一个函数的位置没有要求,在哪都可以调用,在其它函数中或者main函数中都可调用。
       调用有参函数时,传入参数的个数、类型要与原声明的参数一致,这里写参数时,参数一般是确定的值或者是已经声明并赋值的变量,所以这里就不需要写参数类型了,写了会报错。有返回值的函数可以先定义一个类型一致的变量来接收返回值,当然直接使用有返回值的函数对返回值不予接收也是可以的(有些C语言内置函数不接受返回值会报警,但不影响运行)。
       一个函数只能有一个返回值。如果想返回多个值,可以返回一个数组的首地址指针,然后用指针按图索骥,找到其它值。或者在函数内部操作全局变量、指针都可以影响到函数外部,不一定必须从返回值得到结果。
       函数调用的特例:递归调用,即函数中自己调用自己;这种调用方式内部必须有一个在特定条件下结束的机制,否则会陷入死循环。典型的递归调用程序是计算阶乘,关于计算阶乘的小程序本人曾经发表过,有兴趣可以在我的博文中找找。
       再举一个完整的关于函数的例子:

float mySum(float a1,float a2,float a3) //返回值float三个参数也是float(参数与返回值类型可以不一致)
{return a1 + a2 + a3; //返回三个参数的合计
}
#include<stdio.h>
int main(void)
{float x=mySum(1.23,4.56,7.89); //调用mySum函数传入3个参数并用x接收返回值printf("%f", x); //将x显示到屏幕getchar(); //阻塞程序运行return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速盾:cdn服务和云服务的区别?

CDN&#xff08;Content Delivery Network&#xff09;服务和云服务在互联网技术中都起到了重要的作用&#xff0c;但是它们的功能和应用场景有所不同。CDN服务主要用于加速静态资源的分发和传输&#xff0c;而云服务则提供了更全面的计算和存储服务。 CDN服务是一种通过将数据…

mediasoup源码分析--channel创建及信令交互

mediasoup源码分析--channel创建及信令交互 概述跨职能图业务流程图代码剖析 概述 在golang实现mediasoup的tcp服务及channel通道一文中&#xff0c;已经介绍过信令服务中tcp和channel的创建&#xff0c;本文主要讲解c中mediasoup的channel创建&#xff0c;以及信令服务和medi…

基于CentOS的全新Linux机器安装Jenkins并生成Allure报告

目录 一、安装Docker 二、安装Docker Compose 三、准备测试用例 四、配置docker-compose.yml 五、启动Jenkins 六、配置Jenkins和Allure插件 七、创建含pytest的Jenkins任务 一、安装Docker 在CentOS上&#xff0c;首先更新包管理工具并安装所需的包。 sudo yum update…

12.3 Go 测试覆盖率

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

基于Elementui组件,在vue中实现多种省市区前端静态JSON数据展示并支持与后端交互功能,提供后端名称label和id

基于Elementui组件&#xff0c;在vue中实现多种省市区前端静态数据&#xff08;本地JSON数据&#xff09;展示并支持与后端交互功能&#xff0c;提供后端名称label和id 话不多说&#xff0c;先上图 1.支持传递给后端选中省市区的id和名称&#xff0c;示例非常完整&#xff0c…

阿里云 邮件系统DNS域名解析 搭配 postfix+dovecot 邮件服务器

1 创建邮箱域名A记录(一般邮箱客户端&#xff0c;增加pop,imap,stmp 3条记录) 登录阿里云控制台--云解析DNS 2 MX记录 3 SPF记录

SQLAlchemy 连接池

官网SQLAlchemy 是一个流行的 Python SQL 工具包和对象关系映射(ORM)系统,它允许开发者使用 Python 类和对象来与数据库进行交互。在 SQLAlchemy 中,连接池用于管理和复用数据库连接,以提高性能和减少资源消耗。 SQLAlchemy 默认使用 QueuePool 作为连接池实现,但你可以…

【论文复现|智能算法改进】基于多策略的改进蜜獾算法及其应用

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】蜜獾算法&#xff08;HBA&#xff09;原理及实现 2.改进点 限制反向学习机制 在挖掘模式和蜂蜜模式不同路径更新的基础上引入限制反向学习机制&#xff0c;在算法迭代时&#xff0c;对当前的…

Spark 面试题(十六)

1. 简述Spark运行时并行度的设置 &#xff1f; 在Spark中&#xff0c;“并行度”&#xff08;Parallelism&#xff09;通常指的是作业中同时执行的任务数量。这个数量决定了在任何给定时间可以有多少任务并发运行&#xff0c;进而影响作业的执行效率和资源利用。以下是设置Spa…

Fegin如何传参form-data文件

Form-data传输file参数&#xff0c;这个大家都比较清楚&#xff0c;那么针对于Fegin参数file参数该如何操作呢&#xff01;下面截图来找到对应的参数关系。 一、之前我们在postMan中是这种传参的&#xff0c;那么如果使用Feigin来传输文件File 二、在Fegin中传form-data参数&a…

C/C++ struct stat介绍

目录 前言 struct stat struct stat 使用 参考 共勉 前言 本文详细介绍了stat结构体的成员变量&#xff0c;以及使用案例&#xff0c;希望能够帮到您。 struct stat struct stat 结构体用于表示文件或者文件系统对象信息的一种结构体的声明&#xff0c;通常在POSIX&#x…

Mac M3 Pro 部署Flink-1.16.3

目录 1、下载安装包 2、解压及配置 3、启动&测试 4、测试FlinkSQL读取hive数据 以上是mac硬件配置 1、下载安装包 官网&#xff1a;Downloads | Apache Flink 网盘&#xff1a; Flink 安装包 https://pan.baidu.com/s/1IN62_T5JUrnYUycYMwsQqQ?pwdgk4e Flink 已…

什么是FOF,什么是信托

基金里面的FOF是什么&#xff1f;请准确专业通俗的解释下 FOF是“Fund of Funds”的缩写&#xff0c;中文称为“基金中的基金”。顾名思义&#xff0c;FOF是一种投资于其他基金的基金产品。与直接投资于股票、债券或货币市场工具的传统基金不同&#xff0c;FOF将其资产投资于一…

时政|精准公交

背景 重庆中心城区开设“小巷公交—便民健康专线”&#xff0c;方便市民就医。“便民健康专线”尊重和回应了市民差异化、个性化需求&#xff0c;见证了公交方面的“思路一变天地宽”。城市的公交汽车竞争力相对不足&#xff0c;客流出现下滑&#xff0c;出现了经营困难&#…

WDF驱动开发-注册表项

驱动程序通常使用一组系统定义的注册表项来存储或访问特定于驱动程序或特定于设备的信息。 驱动程序可能会访问以下注册表项&#xff1a; 1. 参数 键 驱动程序 的参数密钥 可以包含驱动程序的配置信息&#xff0c;可以通过调用 WdfDriverOpenParametersRegistryKey 进行访问。…

【神经网络】深度神经网络如何应用于推荐系统

深度神经网络&#xff08;Deep Neural Networks, DNN&#xff09;在推荐系统中的应用非常广泛&#xff0c;它们能够捕获用户和物品之间复杂的非线性关系&#xff0c;以及用户行为中的潜在模式。以下是一些深度神经网络在推荐系统中的应用方式&#xff1a; 基于内容的推荐&…

【ComfyUI】Stable Diffusion 3 加Controlnet

基于 instantX-research/diffusers_sd3_control: &#x1f917; Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX. (github.com) 和 ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers: ComfyUI SD3-Medium ControlNet&#…

html入门综合练习

综合练习 通过实际项目练习可以更好地理解和掌握HTML、CSS和JavaScript。以下是几个综合练习项目的建议&#xff1a; 项目1&#xff1a;个人简历网页 创建一个包含以下内容的个人简历网页&#xff1a; 个人简介&#xff08;姓名、照片、联系方式&#xff09;教育背景工作经…

Survival Animations

一套生存游戏的动画集,包括采集、建造、捕鱼、剥皮/鞣制、篝火等更多内容。 总动画数:89 建造/制作 30 篝火 28 饮水 3 水壶 3 觅食 2 治疗 3 空闲 1 原始捕鱼 7 剥皮 1 矛捕鱼 4 伐木 5 下载:​​Unity资源商店链接资源下载链接 效果图:

【INTEL(ALTERA)】为什么在启用模拟选项的情况下生成 F-Tile DisplayPort FPGA IP 设计示例会失败?

目录 说明 解决方法 说明 由于 Quartus Prime Pro Edition 软件 v23.4 及更早版本存在问题&#xff0c;无法成功生成启用仿真的 F-Tile DisplayPort FPGA IP 设计示例。 解决方法 生成 F-Tile DisplayPort FPGA IP 设计示例时&#xff0c;请勿选择仿真选项。无需仿真选项即…