带你学C语言:带你学函数

目录

🌍函数的概念

★★☆☆☆库函数

★★★★☆自定义函数

★★★☆☆形参与实参

★★★☆☆return语句

★★★☆☆数组做函数参数

★★★☆☆嵌套调用和链式访问

★★★☆☆函数的声明和定义

✍结束语


🌍函数的概念

数学中我们其实就见过函数的概念,比如:一次函数 y=kx+b ,k和b都是常数,给⼀个任意的x,就 得到⼀个y值。
其实在C语言也引入函数(function)的概念,有些翻译为:子程序,子程序这种翻译更加准确⼀些。
C语言中的函数就是⼀个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。
C语言的程序其实是由无数个小的函数组合而成的,也可以说:一个大的计算任务可以分解成若 个较小 的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以
复用的,提升了开发软件的效率。
在C语言中我们一般会见到两类函数:
库函数
自定义函数

根据上述的函数概念,我们可以知道其实函数就是就是将我们的一部分功能较为长的代码,封装成一个函数,这样有什么好处呢,一就是我们可以不用多次敲代码使用该功能,只需要调用函数即可。二是大大增强代码的可读性,让读者读着舒服。好了那我们就快快开始这一讲吧。 

★★☆☆☆库函数

2.1 标准库和头文件
C语言标准中规定了C语言的各种 语法规则,C语言并不提供库函数;C语言的国际标准ANSI C规定了一 些常用的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语言标准就给出了⼀系列 函数的实现。这些函数就被称为库函数。
我们知道的 printf scanf 都是库函数,库函数的也是函数,不过这些函数已经是现 成的,我们只要学会就能直接使用了。有了库函数,⼀些常见的功能就不需要我们自己实现了,⼀
定程度提升了效率;同时库函数的质量和执行效率上都更有保证。 各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能的划分,都在不同的头文件中进
行了声明。
库函数相关头文件https://zh.cppreference.com/w/c/header
有数学相关的,有字符串相关的,有⽇期相关的等,每⼀个头文件中都包含了,相关的函数和类型等
信息,库函数的学习不用着急⼀次性全部学会,慢慢学习,各个击破就行。
2.2 库函数的使用方法
库函数的学习和查看工具很多,比如:
C/C++官网的链接https://zh.cppreference.com/w/c/header
cplusplus.comhttps://legacy.cplusplus.com/reference/clibrary/

这边的东西小赵就不细讲了,因为我们之前就已经接触过很多的库函数的概念,只是之前不知道具体的概念而已,然后小赵在这里也是提供了一些小赵同学在平常学习中常用的一些网站,大家可以根据这些网站去学习就行。我们下面主要谈谈自定义函数。

★★★★☆自定义函数

自定义形式如下:
ret_type fun_name(形式参数)
{
}
ret_type 函数返回类型
fun_name 函数名
括号中放的是形式参数
{}括起来的是函数体(封装的代码,这段代码执行这个函数要执行的功能)

小赵在这里为大家举个例子帮助大家理解。

 

这里小赵举了一个有返回值的和无返回值的供大家参考,这里需要注意的是,我们有时候刚学函数的时候,对于无返回值的函数可能会忘记加(),但其实到后面我们会知道这个括号恰恰是函数的灵魂所在,它调用了函数,可以说是函数启动的开关。

★★★☆☆形参与实参

下面来给大家聊聊实参和形参,其实这个事情很简单,我给大家说个事大家就能明白了。相信大家都见过压月饼的模具,或者是一些其他的蛋糕之类的模具,如果实在没见过也可以去抖音搜搜。那么我们在函数中设置的输入就像是这个模具。就像我上面的那个代码的x,y.

它的作用其实就相当于一个模具。我们将实实在在的数字,或者被赋值过的变量灌入这个模具中,然后这个模具就会经过一系列处理,帮我们的实实在在的数字,或者被赋值过的变量给和在一起,然后返回出来。

这大概就是实参和形参的概念,我们这里的x,y就是形参,而我们的实实在在的数字,或者被赋值过的变量就是实参。相信大家听到这里就明白了,原来其实它就是个工厂,帮忙加工一下我们的数据啊。原来如此,哈哈。

★★★☆☆return语句

return语句在函数中扮演着极其重要的角色,它就是将我们模具压出来的结果返回值,它就是整个过程的结果。

在函数的设计中,函数中经常会出现return语句,这里讲⼀下return语句使用的注意事项。
return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执行表达式,再返回表达式
的结果。
• return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。
return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值隐式转换为函数的返回类型。
return语句执行后,函数就彻底返回,后边的代码不再执行。
如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

★★★☆☆数组做函数参数

这里先给大家提供数组函数的一些要求

函数的形式参数要和函数的实参个数匹配
函数的实参是数组,形参也是可以写成数组形式的
形参如果是一维数组,数组大小可以省略不写
形参如果是二维数组,行可以省略,但是列不能省略
数组传参,形参是不会创建新的数组的后面函数栈帧会聊)
形参操作的数组和实参的数组是同⼀个数组

我们都知道函数是一个集合,那么它又应该如何传入函数中呢,这里可以看小赵下面的操作。只演示一遍哦,好好看。

我们这里传入的就是整个数组。

★★★☆☆嵌套调用和链式访问

接着就是嵌套,嵌套是什么呢,其实就像是俄罗斯套娃一样,一个函数下面还有一个函数,一个接着一套。那如果自己套自己叫什么呢?那个就叫做函数的递归,这个后面回聊,这里就不多说了

它呢其实也简单,就是我们运行到那个函数的时候,我们填入的其实还是我们这个函数的x,y,因为这里是我们的地盘,然后在进入它的函数中,返回出值就好了。

★★★☆☆函数的声明和定义

大家都知道,代码不是飞的,不是跳的,它是一行一行脚踏实地地运行的,它的运行是一行接着一行。那我们在我们主函数执行我们自定义函数的时候吗,如果我们的自定义函数在主函数下面还没有被读入这个系统,你说这个代码能运行吗,我觉得运行不了,为了解决这个问题,我们在C语言中弄出了一个函数的声明,这个玩意就是告诉你我是存在的你别觉得我好像不存在一样,那么我们的系统因为知道这个信息就会一直向下运行找到函数的内容在运营。这个就像我们的身份证一样,函数拿着它就是告诉你,我是个函数,那么这个函数声明怎么弄呢?其实也简单就是我们原本定义函数的部分加个;就可以。

✍结束语

好了,今天小赵的分享就到这里了,如果大家觉得小赵的文章讲的还可以给小赵点个赞,当然如果对小赵这次讲的函数感觉难度不够,大家可以去看看小赵的专栏C语言小游戏中的扫雷,猜数字游戏,三子棋,里面都有使用各种函数,还有对static等作用的讲解,更有多个文件如何处理函数的讲解,欢迎大家阅览哦。

听说各位快要期末考试了,小赵准备给大家准备一起期末刷题专栏,帮助大家旗开得胜。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,小赵及时改正,感谢大家支持!!!

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

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

相关文章

系统运维安全之病毒自检及防护

一、前言 Linux勒索病毒(Linux ransomware)是一种最令人恶心的计算机恶意病毒,它以侵入Linux系统,捆绑文件并要求支付赎金才能释放文件为主要目的,破坏用户的数据,造成数据讹诈。Linux勒索病毒它们的存在已…

算法通关村第十七关-青铜挑战贪心算法思想

大家好我是苏麟 , 今天说说贪心算法 . 贪心思想很难用理论解释,本文我们先通过案例来感受一下贪心是如何解决问题的 大纲 难以理解的贪心算法贪心问题举例分发饼干柠檬水找零分发糖果 难以理解的贪心算法 贪心的思想非常不好解释,而且越使用权威的语言解…

如何解读手机APP入侵与逆向破解

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理介绍入…

报错:Parsed mapper file: ‘file mapper.xml

报错 : Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

P1004 [NOIP2000 提高组] 方格取数

洛谷的题 网址:P1004 [NOIP2000 提高组] 方格取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划,太tm爽了 一般来说是走一次的,这个是走两次,就变难了 怎么办呢? 一个方法是:同时开始走 先…

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…

Java抽象类(abstract class)和接口(interface)的区别——面试

1.抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;的区别&#xff1a; 抽象类可以有构造方法&#xff0c;接口中不能有构造方法。 抽象类中可以有普通成员变量&#xff0c;接口中没有普通成员变量。抽象类中可以包含非抽象的普通方法&am…

ultralytics yolo图像分类训练案例;pytorch自有数据集图像分类案例

1、ultralytics yolo图像分类训练案例 优点:使用方便,训练过程评估指标可以方便查看 缺点:自带模型少,可选择自定义小 参考:https://docs.ultralytics.com/tasks/classify/#val https://blog.csdn.net/weixin_42357472/article/details/131412851 1)数据集格式 https://…

dockerdesktop 制作asp.net core webapi镜像-连接sqlserver数据库容器

1.使用visual studio 创建 asp.net core webapi项目 选择启用docker 会生成Dockerfile文件 2.使用efcore连接数据库&#xff0c;安装efcore的包 <ItemGroup><PackageReference Include"Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version&qu…

Linux系统调试课:PCIe调试手段

文章目录 一、lspci 命令二、pciutils 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文我们要介绍pcie调试手段。 一、lspci 命令 通过lspci可以查看当前系统挂载了哪些pci设备。 lspci - 列出 PCI 设备 lspci 命令可以列出计算机中所有 PCI 设备的详细信息,…

【Transformer论文精读系列】(一)如何理解Transformer里的注意力机制?

论文&#xff1a;Attention Is All You Need 参考李沐老师的讲解视频&#xff1a; Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili 其他参考&#xff1a; 超强动画&#xff0c;一步一步深入浅出解释Transformer原理&#xff01;_哔哩哔哩_bilibili Transformer论文逐段…

JVM虚拟机:JVM参数之X参数

本文重点 本文将学习x参数 x参数 -Xint:解释执行 -Xcomp&#xff1a;第一次使用就编译成本地代码 -Xmixed&#xff1a;混合模式&#xff08;Javac、java&#xff0c;先编译后执行&#xff09;

17、迭代器模式(Iterator Pattern)

迭代器模式提供了顺序访问集合对象中的各种元素&#xff0c;而不暴露该对象内部结构的方法。如Java中遍历HashMap。 迭代器模式将遍历集合中所有元素的操作封装成迭代器类&#xff0c;其目的是在不暴露集合对象内部结构的情况下&#xff0c;对外提供统一访问集合的内部数据的方…

C# Demo--汉字转拼音

1.Nuget安装NPOI及Pinyin4net 2.Demo 代码部分 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using System.IO;…

基于ssm vue的社区互助平台源码和论文

摘 要 随着社区互助规模的不断扩大&#xff0c;社区互助数量的急剧增加&#xff0c;有关社区互助的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有社区互助管理来提高社区互助管理工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速…

​HTML代码混淆技术:原理、应用和实现方法详解

​HTML代码混淆技术&#xff1a;原理、应用和实现方法详解 HTML代码混淆是一种常用的反爬虫技术&#xff0c;它可以有效地防止爬虫对网站数据的抓取。本文将详细介绍HTML代码混淆技术的原理、应用以及实现方法&#xff0c;帮助大家更好地了解和运用这一技术。 一、HTML代码混淆…

Day51力扣打卡

打卡记录 Plus and Multiply&#xff08;模拟&#xff09; 链接 要满足 a x b ∗ y n a^x b * y n axb∗yn 的关系&#xff0c;可以枚举满足 b ∗ y n − a x b * y n - a ^ x b∗yn−ax 的可余条件。 t int(input()) for _ in range(t):n, a, b map(int, input().…

电脑上mp4视频文件无缩略图怎么办

前言&#xff1a;有时候电脑重装后电脑上的mp4视频文件无缩略图&#xff0c;视频文件数量比较多的时候查找比较麻烦 以下方法亲测有效&#xff1a; 1、下载MediaPreview软件 2、软件链接地址&#xff1a;https://pan.baidu.com/s/1bzVJpmcHyGxXNjnzltojtQ?pwdpma0 提取码&…

python笔记:dtaidistance

1 介绍 用于DTW的库纯Python实现和更快的C语言实现 2 DTW举例 2.1 绘制warping 路径 from dtaidistance import dtw from dtaidistance import dtw_visualisation as dtwvis import numpy as np import matplotlib.pyplot as plts1 np.array([0., 0, 1, 2, 1, 0, 1, 0, 0…

合并两个有序数组(leetcode_刷题1)

目录 题目&#xff1a;合并两个有序数组 题目分析方向1&#xff1a; 题目分析方向2&#xff1a; 题目&#xff1a;合并两个有序数组 题目要求&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums…