7.2 怎样定义函数
7.2.1 为什么要定义函数
主要内容:
为什么要定义函数
C语言要求所有在程序中用到的函数必须“先定义,后使用”。这是因为在调用一个函数之前,编译系统需要知道这个函数的名字、返回值类型、功能以及参数的个数与类型。如果没有事先定义,编译系统将无法知道这个函数是什么,要实现什么功能,从而无法执行这个函数。
例如,如果想用max
函数来求两个数中的较大者,必须事先按规范对它进行定义。这样,当程序执行max
时,编译系统就会按照定义时所指定的功能执行。
定义函数应包括的内容
定义函数时,应该包括以下几个内容:
- 函数名字:以便以后按名调用。
- 函数类型:即函数返回值的类型。
- 参数的名字和类型:以便在调用函数时向它们传递数据。对无参函数不需要这项。
- 函数功能:即函数应当完成什么操作,这是最重要的,是在函数体中解决的。
库函数
C编译系统提供了一些库函数,这些库函数是由编译系统事先定义好的,包含在库文件中。程序设计者不必自己定义这些库函数,只需要通过#include
指令把有关的头文件包含到本文件模块中即可。例如,如果在程序中用到数学函数(如sqrt
,fabs
,sin
,cos
等),就必须在本文件模块的开头写上:
#include<math.h>
这些库函数只提供了最基本、最通用的一些函数。对于库函数中没有提供的函数,程序设计者需要在程序中自己定义。
7.2.2 定义函数的方法
主要内容:
这段文字描述了在C语言(或类似的编程语言)中定义函数的不同方法。以下是各部分的概述:
### 1. 定义无参函数
无参函数是没有输入参数的函数。它们由`void`关键字声明,表明这个函数不返回值。例子包括`print_star`和`print_message`函数。以下是定义无参函数的一般形式:
类型名 函数名()
函数体
或
类型名 函数名(void)
函数体
### 2. 定义有参函数
有参函数接受一个或多个参数。以下是有参函数的例子,该函数返回两个整数中的最大值:
int max(int x, int y)
{int z;z = x > y ? x : y;return(z);
}
定义有参函数的一般形式为:
类型名 函数名(形式参数列表)
函数体
### 3. 定义空函数
空函数不执行任何操作。它们通常用于占位,预留空间以便未来实现某些功能。以下是定义空函数的形式:
void dummy()
{}
调用空函数不会执行任何操作。例如,在程序设计中,可以使用空函数来占用一个位置,预留未来扩充的功能,当功能实现时,再替换为空函数。
### 总结
这三种定义函数的方法分别应用于不同的场景。无参函数通常用于不需要输入并且不返回值的情况。有参函数可以处理输入参数并返回值。空函数主要用作占位符,为未来的功能扩展提供便利。这些方法结合使用,可以创建出结构清晰、可读性好且方便扩展的程序。
总结:
在C语言中,定义函数是一个核心概念,它涉及到以下几个重点、难点和易错点:
### 重点
1. **函数声明和定义**:
- 函数声明:声明函数的返回类型、函数名和参数类型。
- 函数定义:包含函数的实际代码和逻辑。
- 函数原型:是函数声明的一部分,用于告知编译器函数的签名。
2. **返回类型**:
- 每个函数都有一个返回类型,指定了函数返回值的数据类型。
- 若函数不返回值,使用`void`作为返回类型。
3. **参数列表**:
- 函数可以有参数,通过参数列表定义。
- 参数可以是任何数据类型,并且可以有任意数量的参数。
### 难点
1. **作用域**:
- 理解局部变量与全局变量的作用域及其可见性。
- 全局变量对所有函数可见,而局部变量仅在定义它的函数内可见。
2. **参数传递**:
- 理解值传递与引用传递的区别。
- 在C语言中,函数参数默认是通过值传递,即传递变量的拷贝,函数内的操作不会影响原变量。
3. **递归**:
- 递归是一种函数调用自身的技术。
- 正确使用递归需要正确的基本情况和递归情况,以避免无限递归。
### 易错点
1. **函数声明和定义的混淆**:
- 函数声明没有函数体,而函数定义有。
- 函数应该在被调用之前被声明或定义,以免出现“implicit declaration”警告。
2. **参数类型和数量的不匹配**:
- 调用函数时,实参的类型和数量必须与形参匹配。
- 不匹配可能导致编译错误或未定义的行为。
3. **返回类型不匹配**:
- 函数的实际返回值必须匹配其声明的返回类型。
- 若函数声明为`void`,则不能返回值;若声明为其他类型,必须返回该类型的值。
4. **忘记返回值**:
- 若函数有非`void`的返回类型,忘记返回值会导致编译器警告,并可能返回未定义的值。
5. **递归深度**:
- 如果递归函数没有正确的终止条件,或者递归深度太大,将导致堆栈溢出。### 示例
// 函数声明
int max(int a, int b);// 函数定义
int max(int a, int b) {return a > b ? a : b;
}
在编写C语言函数时,务必注意以上的重点、难点和易错点,以避免常见的错误和问题。
相关文章:
7.2 怎样定义函数
7.2.1 为什么要定义函数 主要内容: 为什么要定义函数 C语言要求所有在程序中用到的函数必须“先定义,后使用”。这是因为在调用一个函数之前,编译系统需要知道这个函数的名字、返回值类型、功能以及参数的个数与类型。如果没有事先定义&…...
Chrome扩展V2到V3的变化
Chrome扩展manifest V3变化、升级迁移指南_chrome_ZK645945-华为云开发者联盟 (csdn.net) 1.background //V2 "background": "background.js"//V3 "background": {"service_worker": "background.js"} 2.executeScript …...
lock、tryLock、lockInterruptibly有什么区别?
lock、tryLock 和 lockInterruptibly 都是用于线程同步的方法,但它们有不同的行为和用途: lock() 方法:lock() 方法是 Java 中 Lock 接口定义的一部分,它用于获取锁并阻塞当前线程,直到锁可用为止。如果锁当前被其他线程占用,lock() 方法会导致当前线程阻塞,直到锁被释放…...
mysql面试题5:索引、主键、唯一索引、联合索引的区别?什么情况下设置了索引但无法使用?并且举例说明
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说索引、主键、唯一索引、联合索引的区别? 索引、主键、唯一索引和联合索引是数据库中常用的索引类型,它们有以下区别: 索引:索引是一种数…...
数据集笔记:纽约花旗共享单车od数据
花旗共享单车公布的其共享单车轨迹数据,包括2013年-2021年曼哈顿、布鲁克林、皇后区和泽西城大约14500辆自行车和950个站点的共享单车轨迹数据 数据地址:Citi Bike System Data | Citi Bike NYC | Citi Bike NYC 性别(0未知;1男&…...
为什么 0.1+0.2 不等于 0.3
为什么 0.10.2 不等于 0.3 在 JavaScript 中,0.1 0.2 的结果不等于 0.3,这是因为在 JavaScript 中采用的是双精度浮点数格式(64 位),而在这种格式下无法精确表示某些小数,因此在进行计算时会出现精度误差。…...
huggingface_hub v0.17 现已发布
InferenceClient 现在支持所有任务!💥,感谢社区的巨大努力,新添加的任务包括: 对象检测文本分类Token 分类翻译问题回答表格问题回答填充掩码表格分类表格回归文档问题回答视觉问题回答零样本分类 这些方法还支持使用 …...
机器学习——一元线性回归构造直线,并给出损失函数
目 录 Question 问题分析 1.概念补充 2.流程分析 3.注意 具体实现 最终成果 代码 思考: Question 在二维平面有n个点,如何画一条直线,使得所有点到该直线距离之和最短 如果能找到,请给出其损失函数 问题分析 1.概念…...
OpenHarmony自定义组件介绍
一、创建自定义组件 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑…...
云原生之使用Docker部署PDF多功能工具Stirling-PDF
云原生之使用Docker部署PDF多功能工具Stirling-PDF 一、Stirling-PDF介绍1.1 Stirling-PDF简介1.2 Stirling-PDF功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Stirli…...
B树和B+树的介绍和对比,以及MySQL为何选择B+树
在计算机科学中,B树和B树是常用的数据结构,用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点,并最后…...
MD5 绕过第一式:弱比较绕过
文章目录 参考环境MD5韧性脆弱性md5() 隐式类型转换字符串连接数学运算布尔判断相等运算符 科学计数法科学计数法前缀 0E 与 0e PHP8 与 PHP 其他版本下字符串转化为数值的具体规则PHP8数值字符串优化 其他版本更为详细的讲解 字符串与字符串的弱比较字符串与数值的弱比较0e215…...
红黑树是如何实现的?
文章目录 一、红黑树的概念二、红黑树的性质三、红黑树和AVL树对比四、红黑树的插入1. 红黑树的结点定义2. 父亲的颜色3. 叔叔的颜色为红色4. 叔叔不存在5. 叔叔存在且为黑6. 插入的抽象图 五、红黑树的验证1. 检查平衡2. 计算高度与旋转次数3. 验证 六、 红黑树与AVL树的比较 …...
实验室没人导该怎么办
实验室没人教该怎么办 Q: 国内top5高校研一,课题开始老板就给了一个大方向,之后怎么做实验都是自己看文献研究的,终于开始动手做实验,才发现别人根本不想管你,宁愿抱着电脑看剧也不想教你,十分焦虑,该怎么办? A: 按照大多数实验室的惯例,老板一定会指派一个小老板…...
pytest简明教程
1. 简介 pytest是一款基于Python的测试框架。与Python自带的unittest相比,pytes语法更加简洁,断言更加强大,并且在自动测试以及插件生态上比unittest都要更加强大。 1.1. 安装pytest pip install pytest1.2. pytest命名规则 pytest默认会…...
解决方案:解决https页面加载http资源报错
HTTPS页面加载HTTP资源会报错的原因是出于安全性考虑。 HTTPS(HyperText Transfer Protocol Secure)是一种通过使用SSL/TLS加密通信来保护数据传输的协议,它确保了客户端和服务器之间的安全连接。 当HTTPS页面尝试加载非加密的HTTP资源时&a…...
嵌入式开源库之libmodbus学习笔记
socat 安装sudo apt-get install socat创建终端 socat -d -d pty,b115200 pty,b115200查看终端 ls /dev/pts/ minicom 安装 sudo apt-get install minicom链接虚拟终端 sudo minicom -D /dev/pts/3以十六进制显示 minicom -D /dev/pts/1 -H设置波特率 minicom -D /dev/pts/1…...
Spring MVC 中的数据验证技术
一、前言 在Web开发中,数据验证是不可或缺的一部分。Spring MVC 框架提供了强大的数据验证支持,可以帮助我们轻松地对用户提交的数据进行验证。 二、实现 Spring MVC 使用 JSR-303 验证规范(Hibernate Validator 是其参考实现)…...
windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error
问题描述 今天在学习nginx时,想在hosts配置一个nginx的域名映射,但是发现访问nginx服务的ip时可以访问通,在dos命令窗口ping配置的域名映射也可以ping通,但是一旦在浏览器通过http请求访问配置的hosts域名映射时却出现 500 Inter…...
如何将图片转为ico格式
这里主要是记录一个网站,如果你有更好的办法欢迎留言~ ico简介 ICO(Icon)是一种用于表示图标的文件格式,常用于Windows操作系统中。ICO格式的图片通常用于表示应用程序、文件夹、网站等的图标。 ICO文件可以包含多个图标&#x…...
ElasticSearch - 基于 JavaRestClient 操作索引库和文档
目录 一、RestClient操作索引库 1.1、RestClient是什么? 1.2、JavaRestClient 实现创建、删除索引库 1.2.1、前言 1.2.1、初始化 JavaRestClient 1.2.2、创建索引库 1.2.3、判断索引库是否存在 1.2.4、删除索引库 1.3、JavaRestClient 实现文档的 CRUD 1.3…...
【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法
论文题目:《MagFace: A Universal Representation for Face Recognition and Quality Assessment》-CVPR2021 论文地址:https://arxiv.org/abs/2103.06627v4 代码地址:https://github.com/IrvingMeng/MagFace...
FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持
目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…...
智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?
我们来看一条七年前的真实新闻报道,2016 年《福布斯》在报道中提到“2020 年会有 1000 万台的自动驾驶汽车”。然而 2023 年的现在,真正实现 L4 级别自动驾驶的汽车,仍然远远没有达到这个预测的数量。 另一边,数据显示,…...
APScheduler包——python tornado框架中实现定时任务
介绍: APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时…...
BASH shell脚本篇3——字符串处理
这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能…...
【SSL】用Certbot生成免费HTTPS证书
1. 实验背景 服务器:CentOS7.x 示例域名: www.example.com 域名对应的web站点目录: /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…...
报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist
Linux大小写区分,导致部署项目时MySQL出现错误 问题原因:找不到Teacher这张表。因为在windows下的mysql表名不区分大小写,所以在windows下运行项目没问题。在linux中,mysql会区分大小写,所以sql语句表名用大写的就会找…...
.NET的PLC帮助类
TCP和UDP协议: TCP(传输控制协议)和UDP(用户数据报协议)是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务,但具有不同的特性和功能。 TCP协议是一种提供可靠、面向连接的字节流服务的传输协…...
Linux中nfs:failed: Operation not supported
先给出思路: 一个简单粗暴的方式:卸载重装排除未知问题,步骤如下: 一、在 Linux 上卸载 NFS 服务器,步骤: 停止 NFS 服务: sudo service nfs-kernel-server stop如果您使用的是不同的发行版&am…...
网店设计与装修实训报告/乐陵市seo关键词优化
前言 当我们来回切换页面时候,视图被缓存下来,不用每次再去new一个新的视图,可以大大地提高性能。当跳出一个视图后,视图的元素被保存在DOM中,它的作用域也就不在$watch的作用域内,当我们访问一个已经被缓存…...
做网站需要备案吗/沈阳网站关键词优化多少钱
一、定位 定位:定位是一种更加高级的布局手段。通过定位可以将元素放在页面的任意位置。position:通过position来设置定位。可选值:static 默认值,元素是静止,没有开启定位relative 开启元素的相对定位absolute 开启元素的绝对…...
wordpress不好/seo如何挖掘关键词
Android 内存溢出和内存泄漏的问题在面试中,经常有面试官会问“你知道什么是内存溢出?什么是内存泄漏?怎么避免?”通过这篇文章,你可以回答出来了。内存溢出(OOM)是指程序在申请内存时,没有足够的内存空间供…...
苏州专业网站建设开发公司/seo工具包
写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2.将字符串用格式转换类转换成日期( Date date format.parse(str) )3.将日期设置成…...
网站字号/网络广告一般是怎么收费
本节书摘来自异步社区《树莓派开发实战(第2版)》一书中的第2章,第2.4节,作者[英]Simon Monk(蒙克),韩波 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 为树莓派配…...
v2017网站开发/外包客服平台
文章目录1.STL容器简介1.1STL介绍1.2容器分类2.向量vector2.1定义和初始化2.2常用操作2.3遍历操作3.列表list3.1定义和初始化3.2常用操作3.3遍历操作3.4实例程序4.双端队列deque4.1定义和初始化4.2常用操作4.3实例操作5.集合set5.1定义和初始化5.3常用操作5.4遍历操作5.5实例操…...