7.2 怎样定义函数

 7.2.1 为什么要定义函数

 主要内容:

为什么要定义函数

C语言要求所有在程序中用到的函数必须“先定义,后使用”。这是因为在调用一个函数之前,编译系统需要知道这个函数的名字、返回值类型、功能以及参数的个数与类型。如果没有事先定义,编译系统将无法知道这个函数是什么,要实现什么功能,从而无法执行这个函数。

例如,如果想用max函数来求两个数中的较大者,必须事先按规范对它进行定义。这样,当程序执行max时,编译系统就会按照定义时所指定的功能执行。

定义函数应包括的内容

定义函数时,应该包括以下几个内容:

  1. 函数名字:以便以后按名调用。
  2. 函数类型:即函数返回值的类型。
  3. 参数的名字和类型:以便在调用函数时向它们传递数据。对无参函数不需要这项。
  4. 函数功能:即函数应当完成什么操作,这是最重要的,是在函数体中解决的。

库函数

C编译系统提供了一些库函数,这些库函数是由编译系统事先定义好的,包含在库文件中。程序设计者不必自己定义这些库函数,只需要通过#include指令把有关的头文件包含到本文件模块中即可。例如,如果在程序中用到数学函数(如sqrtfabssincos等),就必须在本文件模块的开头写上:

#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语言函数时,务必注意以上的重点、难点和易错点,以避免常见的错误和问题。

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

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

相关文章

多叉树+图实现简单业务流程

文章目录 场景整体架构流程业务界面技术细节小结 场景 这次遇到一个需求,大致就是任务组织成方案,方案组织成预案,预案可裁剪调整.预案关联事件等级配置,告警触发预案产生事件.然后任务执行是有先后的,也就是有流程概念. 整体架构流程 方案管理、预案管理构成任务流程的基础条…

nginx 多层代理 + k8s ingress 后端服务获取客户真实ip 配置

1.nginx http 七层代理 修改命令空间&#xff1a; namespace: nginx-ingress : configmap&#xff1a;nginx-configuration kubectl get cm nginx-configuration -n ingress-nginx -o yaml添加如上配置 compute-full-forwarded-for: “true” forwarded-for-header: X-Forwa…

.balckhoues-V-XXXXXXX勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 随着网络犯罪的不断演进&#xff0c;勒索病毒已成为当前数字时代的威胁之一&#xff0c;其中包括.balckhoues-V-XXXXXXX勒索病毒。本文将深入介绍.balckhoues-V-XXXXXXX勒索病毒的特点、数据恢复方法以及预防措施&#xff0c;以帮助您更好地理解和应对这一威…

NPDP产品经理认证怎么报名?考试难度大吗?

PMDA&#xff08;Product Development and Management Association&#xff09;是美国产品开发与管理协会&#xff0c;在中国由中国人才交流基金会培训中心举办NPDP&#xff08;New Product Development Professional&#xff09;考试&#xff0c;该考试是产品经理国际资格认证…

Spring实例化源码解析之ComponentScanAnnotationParser(四)

上一章我们分析了ConfigurationClassParser&#xff0c;配置类的解析源码分析。在ComponentScans和ComponentScan注解修饰的候选配置类的解析过程中&#xff0c;我们需要深入的了解一下ComponentScanAnnotationParser的parse执行流程&#xff0c;SpringBoot启动类为什么这么写&…

WinPcap4.1.3安装失败解决方法,A newer version of winpcap...

WinPcap4.1.3安装失败解决方法&#xff0c;A newer version of winpcap… 如图所示&#xff0c;提示本地安装有更高版本的WinPcap时&#xff0c;按如下操作即可解决。 找到相应文件&#xff0c;扩展名修改成如下&#xff1a; C:\Windows\SysWOW64 的wpcap.dll改成 wpcap.dll.…

【Verilog 教程】6.5 Verilog避免Latch

关键词&#xff1a;触发器&#xff0c;锁存器 Latch 的含义 锁存器&#xff08;Latch&#xff09;&#xff0c;是电平触发的存储单元&#xff0c;数据存储的动作取决于输入时钟&#xff08;或者使能&#xff09;信号的电平值。仅当锁存器处于使能状态时&#xff0c;输出才会随着…

使用 Velocity 模板引擎的 Spring Boot 应用

使用 Velocity 模板引擎的 Spring Boot 应用 模板引擎是构建动态内容的重要工具&#xff0c;特别适用于生成HTML、邮件内容、报告和其他文本文档。Velocity是一个强大的模板引擎&#xff0c;它具有简单易用的语法和灵活性。本文将介绍如何在Spring Boot应用中使用Velocity模板…

C语言入门Day_27 开发环境

前言&#xff1a; 在线编译环境涉及到联网&#xff0c;如果在没有网的情况下&#xff0c;我们就不能写代码了&#xff0c;这一章节&#xff0c;我们将会给大家介绍一下如何搭建一个本地的C语言编译环境。 如果想要设置 C 语言环境&#xff0c;需要确保电脑上有以下两款可用的…

二十二,加上各种贴图

使用pbr的各种贴图&#xff0c;albedo,金属度&#xff0c;ao,法线&#xff0c;粗糙度&#xff0c;可以更好的控制各个片元 1&#xff0c;先加上纹理坐标 texCoords->push_back(osg::Vec2(xSegment, ySegment)); geom->setVertexAttribArray(3, texCoords, osg::Array::BI…

凹凸贴图如何提高物体的真实感

什么是凹凸贴图 凹凸贴图&#xff08;Bump Mapping&#xff09;是一种计算机图形学中的技术&#xff0c;用于在表面上模拟微小的凹凸形状&#xff0c;从而增加了物体的细节和真实感。它可以在不改变物体几何形状的情况下&#xff0c;通过修改光照的反应&#xff0c;使表面看起来…

Java编程技巧:文件上传、下载、预览

目录 1、上传文件1.1、代码1.2、postman测试截图 2、下载resources目录中的模板文件2.1、项目结构2.2、代码2.3、使用场景 3、预览文件3.1、项目结构3.2、代码3.3、使用场景 1、上传文件 1.1、代码 PostMapping("/uploadFile") public String uploadFile(Multipart…

idea Springboot 高校科研资源共享系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 高校科研资源共享系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c; 系统具有完整的源代码和数据…

嵌入式Linux应用开发-面向对象-分层-分离及总线驱动模型

嵌入式Linux应用开发-面向对象-分层-分离及总线驱动模型 第八章 驱动设计的思想&#xff1a;面向对象/分层/分离8.1 面向对象8.2 分层8.3 分离8.4 写示例代码8.5 课后作业 第九章 驱动进化之路&#xff1a;总线设备驱动模型9.1 驱动编写的 3种方法9.1.1 传统写法9.1.2 总线设备…

BUUCTF reverse wp 21 - 30

[ACTF新生赛2020]rome 无壳, 直接拖进IDA32 y键把v2改成char[49], n键重命名为iuput int func() {int result; // eaxint v1[4]; // [esp14h] [ebp-44h]char input[49]; // [esp24h] [ebp-34h] BYREFstrcpy(&input[23], "Qsw3sj_lz4_Ujwl");printf("Please…

《Upload-Labs》01. Pass 1~13

Upload-Labs 索引前言Pass-01题解 Pass-02题解总结 Pass-03题解总结 Pass-04题解 Pass-05题解总结 Pass-06题解总结 Pass-07题解总结 Pass-08题解总结 Pass-09题解 Pass-10题解 Pass-11题解 Pass-12题解总结 Pass-13题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https…

基于Java的旅游管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

FreeRTOS入门教程(任务优先级,Tick)

文章目录 前言一、什么是任务优先级二、FreeRTOS如何分辨出优先级最高可运行的任务三、FreeRTOS中的时钟节拍Tick四、什么是时间片五、相同优先级任务怎么进行切换六、任务优先级实验七、修改任务优先级总结 前言 本篇文章将带大家学习FreeRTOS中的任务优先级&#xff0c;并且…

GPT-4科研实践:数据可视化、统计分析、编程、机器学习数据挖掘、数据预处理、代码优化、科研方法论

查看原文>>>GPT4科研实践技术与AI绘图 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#x…

【SSL】用Certbot生成免费HTTPS证书

1. 实验背景 服务器&#xff1a;CentOS7.x 示例域名&#xff1a; www.example.com 域名对应的web站点目录&#xff1a; /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…