C语言王国探险记之函数的简单概念

news2024/11/24 10:24:35

王国探险记系列

文章目录(5)


目录

王国探险记系列

文章目录(5)

前言

一,函数的基本概念

二,调用外部函数和main()函数区别

2.1如果我们将函数的定义放到后面,可不可以呢?

总结


前言

C语言王国探险记,是我们学习C语言,从小白成长为大佬的的探险历程,我们在这章将初步探索函数这两个知识关卡


一,函数的基本概念

我们在数学中就学习过函数,其实函数描述的是一个关系
比如说描述的是y和x的关系
如果y = 2*x+5,这个描述的就是x和y之间的关系
给x一个值,然后y通过这种关系变成另一个值
这是数学里面的函数
那么我们c语言里面函数是什么样子的呢?
c语言里面的函数和我们的数学里面的函数是非常相似的
就可以表示为y = f(x)函数
 y = f(x)
     = 2*x+5
我们把这个逻辑就叫做函数f(x),f(x)这个函数描述的就是x和y的关系

二,调用外部函数和main()函数区别

现在我们想要写一个计算相加和的一个代码

我们将在代码加注释和结果运行图中进行知识点的讲解:

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);//scnaf()里面要取地址的
	//求和
	int s = a + b;//我们创建一个变量s,存放a+b求和得来的值
	printf("%d", s);//然后进行打印
	return 0;
}

我们刚才是在main()函数里面直接求和的
我们能不能创建一个外部函数帮助我们进行求和呢,当然是可以的

我们将在代码加注释和结果运行图中进行知识点的讲解:

//这就是函数的定义
int Add(int x, int y)
 //每一个参数都对应着一个类型,每一个实参都对应着一个形参,跟跟下面的传参要匹配起来
//我们实现的Add函数,a和b传过去,是不是要有有东西接收啊
//x是接受a的值,y是接收b的值
{
	int z = x + y;//我们将x和y相加的和放到z里面去
	return z;//最后我们返回一个z给main()函数
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);//scnaf()里面要取地址的
	//创建一个叫做Add的外部函数进行求和
	int s = Add(a,b);//函数调用
	//我要想求a和b的和是不是要把a和b的值传到Add里面进行求和
	//这个时候Add函数才能知道自己要干什么,Add就是要把a和b的值求出来呀。
	//求出来是不是要把结果告诉main函数啊,这个时候Add会返回一个值,将这个值给s
	printf("%d",s );//然后进行打印
	return 0;
}

 对外调函数的理解:
我们调用外部函数进行求和运算的结果和我们在main()函数里面直接求和的结果是相同的
其实我们可以将函数想想为一个加工厂
当我们给加工厂原材料,经过加工厂的加工,我们就可以得产品了
函数和加工厂是非常相似的,我们要调用函数是不是要给函数输入参数值啊,
调用完函数,函数就给我们一个返回值
为什么在main()里面求和就是一行代码
为啥还要在main()函数外部,在创建一个函数在进行调用,然后在返回值呢?
我们要把格局打开
刚刚的代码可能仅仅是一句代码
但是我们以后要是写一个功能需要很多行代码
我们不能老是在main()里面只要调用就写一遍吧,那样的话这个函数的冗余就比较多
所以我们将这个一个功能封装为一个函数,每次调用的时候就只需要一句话就能调用这个函数
这个代码的冗余就降低了很多,其次这个代码可以复用,提高了我们写代码的效率

 

2.1如果我们将函数的定义放到后面,可不可以呢?

将代码函数放到后面去,是可以的,但是当年去编译代码的时候就会报警告
因为c语言对这种.c文件进行编译的时候,是从第一行代码,往下扫描的
当扫描到main()函数的时候往下走,到了调用Add函数的时候,编译器发现之前根本就没有见过Add函数
实际上有没有,有,在后面呢。但是在扫描到Add()那个代码的时候,它没有见过,所以就报了一个警报
如果我们一定要将函数定义放到后面的话,
那就一定要函数前面进行一个声明,这样就不会报错了

函数要先声明,在定义
但是函数的定义放在前面就不报警告了呀,因为函数的定义就是一种声明
知道函数是怎么写的很重要
一个工程中,可以有多个.c文件
但是多个.c文件中只能有一个mian

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);//scnaf()里面要取地址的
	//创建一个叫做Add的外部函数进行求和
	int s = Add(a,b);//函数调用
	//我要想求a和b的和是不是要把a和b的值传到Add里面进行求和
	//这个时候Add函数才能知道自己要干什么,Add就是要把a和b的值求出来呀。
	//求出来是不是要把结果告诉main函数啊,这个时候Add会返回一个值,将这个值给s
	printf("%d",s );//然后进行打印
	return 0;
}
//将代码函数放到后面去,是可以的,但是当年去编译代码的时候就会报警告
//因为c语言对这种.c文件进行编译的时候,是从第一行代码,往下扫描的
//当扫描到main()函数的时候往下走,到了调用Add函数的时候,编译器发现之前根本就没有见过Add函数
//实际上有没有,有,在后面呢。但是在扫描到Add()那个代码的时候,它没有见过,所以就报了一个警报
//如果我们一定要将函数定义放到后面的话,
//那就一定要函数前面进行一个声明,这样就不会报错了
int Add(int x, int y)
{
	int z = x + y;
	return z;
}
//函数要先声明,在定义
//但是函数的定义放在前面就不报警告了呀,因为函数的定义就是一种声明
//知道函数是怎么写的很重要
//一个工程中,可以有多个.c文件
//但是多个.c文件中只能有一个mian

在主函数的前面添加一个函数的声明就没有问题,也不会报警报 

//函数的声明
int Add(int x, int y);
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);//scnaf()里面要取地址的
	//创建一个叫做Add的外部函数进行求和
	int s = Add(a,b);//函数调用
	//我要想求a和b的和是不是要把a和b的值传到Add里面进行求和
	//这个时候Add函数才能知道自己要干什么,Add就是要把a和b的值求出来呀。
	//求出来是不是要把结果告诉main函数啊,这个时候Add会返回一个值,将这个值给s
	printf("%d",s );//然后进行打印
	return 0;
}
//将代码函数放到后面去,是可以的,但是当年去编译代码的时候就会报警告
//因为c语言对这种.c文件进行编译的时候,是从第一行代码,往下扫描的
//当扫描到main()函数的时候往下走,到了调用Add函数的时候,编译器发现之前根本就没有见过Add函数
//实际上有没有,有,在后面呢。但是在扫描到Add()那个代码的时候,它没有见过,所以就报了一个警报
//如果我们一定要将函数定义放到后面的话,
//那就一定要函数前面进行一个声明,这样就不会报错了
int Add(int x, int y)
{
	int z = x + y;
	return z;
}
//函数要先声明,在定义
//但是函数的定义放在前面就不报警告了呀,因为函数的定义就是一种声明
//知道函数是怎么写的很重要
//一个工程中,可以有多个.c文件
//但是多个.c文件中只能有一个mian

总结

以上就是今天要讲的内容,本文仅仅全面介绍了函数的简单的概念,可以让你在c语言王国的探险更加有趣,充实。

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

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

相关文章

插值应用案例1

案例1 一阶线性插值 待加工零件外形根据工艺要求在一组数据(x,y)给定(如下表),用程控铣床加工时每一刀只能沿着x方向或y方向走非常小的一步,需要从已知数据得到加工步长很小的(x,y)的坐标。 下表中所给x,y数据位于机翼断面的下…

使用Vue脚手架

(193条消息) 第 3 章 使用 Vue 脚手架_qq_40832034的博客-CSDN博客 初始化脚手架 说明 1.Vue脚手架是Vue官方提供的标准化开发工具(开发平台) 2.最新的版本是4.x 3.文档Vue CLI脚手架(命令行接口) 具体步骤 1.如果下载缓慢…

Libvirt Event Loop简介

文章目录 前言实现原理处理框架编程接口 原理验证事件订阅服务监听验证流程 前言 Event Loop顾名思义就是事件循环,整个程序是一个大的循环,通过事件来驱动程序要做的事情。传统编程模型是顺序的,程序运行一次然后终止,这种模型简…

JavaScript Day10 DOM详解

DOM DOM是JS操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个JS对象,从而可以用脚本进行各种操作(比如增删内容)。 • 文档 – 文档表示的就是整个的HTML网页文档…

19-Linux 权限

目录 1.用户操作 1.1.创建用户 1.2.配置密码 1.3. 切换用户 2.三种角色 3.文件类型和访问权限 3.1.文件类型 3.2.基本权限 4.修改文件权限 1.用户操作 Linux下有两种用户: 超级用户(root)普通用户 超级用户:可以再lin…

【Cache】Redis主从复制哨兵模式集群

文章目录 一、Redis 持久化1. 主从复制2. 哨兵模式3. 集群 二、 Redis 主从复制1. 概述2. 主从复制的作用3. 主从复制流程4. 搭建 Redis 主从复制4.1 环境准备4.2 安装 Redis4.3 修改 Master 节点配置文件4.4 修改Slave节点配置文件(Slave1和Slave2配置相同&#xf…

【vant移动端表格数据排版】用vant2简单实现一个把PC端表格数据展示在移动端的排版。上拉加载更多,下拉刷新页面,新增,编辑,删除功能

前言 上次做了一个移动端的表格功能,纯表格的那种。 跟PC一样,但是我一直觉得在移动端上写表格很糟糕的体验,毕竟手机就那么大。这不合理。 但是我这公司又需要把PC端的表格的数据展示在移动端。 导致我只能去试试看怎么排版比较好。由于网上…

【Qt-14】QT小知识点

1、关闭程序时报错 解决方案: 报这个错误可能是内存溢出,申请的空间与注销的空间不一致导致,排查了好久,我不是因为这个原因,我的问题如下,没有new窗体。 2、固定QT窗体大小 this->setMinimumSize(QSi…

NLP实战6:seq2seq翻译实战-Pytorch复现-小白版

目录 一、前期准备 1. 搭建语言类 2. 文本处理函数 3. 文件读取函数 二、Seq2Seq 模型 1. 编码器(Encoder) 2. 解码器(Decoder) 三、训练 1. 数据预处理 2. 训练函数 四、训练与评估 🍨 本文为[&#x1f51…

【算法集训之线性表篇】Day 02

文章目录 题目一思路分析代码实现效果 题目二思路分析代码实现效果 题目一 01.设置一个高效算法,将顺序表L的所有元素逆置,要求其空间复杂度为O(1)。 思路分析 首先,根据题目要求,空间复杂度度为O(1),则不能通过空间换时间的方…

为什么编程更关注内存而很少关注CPU?

我们知道,我们编写的程序,不管是什么编程语言,最后执行的时候,基本上都是CPU在完成。之所以说基本上,是因为还有GPU、FPGA等特殊情况。 但不知道大家发现没有,我们编程的时候,经常在关注内存问…

大促转化率精准预估优化论文随笔记

这是一篇阿里妈妈的论文【KDD’23 | 转化率预估新思路:基于历史数据复用的大促转化率精准预估】 常规的销量预测,遇到一些特大事件,直播、大促,一般很难预估得准确。而且现在电商机制也比较多样,预售、平台折扣等。 本…

初识MySQL:了解MySQL特性、体系结构以及在Linux中部署MySQL

目录 MySQL简介 MySQL特性 MySQL体系结构 SQL的四个层次: 连接层: SQL层: 插件式存储引擎: 物理文件层: 一条SQL语句的执行流程: MySQL在Linux中的安装、部署 首先需要下载mysql软件包&#xff…

月入9000+的CSGO游戏搬砖项目操作细节和疑问 ?给您一一解答

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 01 海外CSGO游戏搬砖项目是什么? csgo搬砖是在外服steam上购买包含印花枪皮等等…

9.2、增量表数据同步

1、数据通道 2、Flume配置 1)Flume配置概述 Flume需要将Kafka中topic_db主题的数据传输到HDFS,故其需选用KafkaSource以及HDFSSink,Channel选用FileChannel。 需要注意的是, HDFSSink需要将不同mysql业务表的数据写到不同的路径…

2023.7.4 Dataloader切分

一、 如果文件夹路径是 path/to/folder with spaces/,使用以下方式输入 path/to/folder\ with\ spaces/或者使用引号包裹路径: "path/to/folder with spaces/"这样可以确保命令行正确解析文件夹路径,并将空格作为路径的一部分进…

ADB自动化测试框架

一、介绍 adb的全称为Android Debug Bridge,就是起到调试桥的作用,利用adb工具的前提是在手机上打开usb调试,然后通过数据线连接电脑。在电脑上使用命令模式来操作手机:重启、进入recovery、进入fastboot、推送文件功能等。简单来…

Intellij IDEA 初学入门图文教程(八) —— IDEA 在提交代码时 Performing Code Analysis 卡死

在使用 IDEA 开发过程中,提交代码时常常会在碰到代码中的 JS 文件时卡死,进度框上显示 Performing Code Analysis,如图: 原因是 IDEA 工具默认提交代码时,分析代码功能是打开的,需要通过配置关闭下就可以了…

Linux高性能网络编程:TCP底层的收发过程

今天探索高性能网络编程,但是我觉得在谈系统API之前可以先讲一些Linux底层的收发包过程,如下这是一个简单的socket编程代码: int main() {... fd socket(AF_INET, SOCKET_STREAM, 0);bind(fd, ...);listen(fd, ...);// 如何建立连接...afd …

冒泡排序法(优化与实例演示)

冒泡排序法 冒泡排序法基本介绍 冒泡排序是一种简单而经典的排序算法,它的原理是通过不断比较相邻元素的大小并交换位置,将较大(或较小)的元素逐渐“冒泡”到数组的末尾。这个过程持续进行多轮,直到整个数组按照顺序…