函数(上)(C语言)

函数(上)

  • 一. 函数的概念
  • 二. 函数的使用
    • 1. 库函数和自定义函数
      • (1) 库函数
      • (2) 自定义函数的形式
    • 2. 形参和实参
    • 3. return语句
    • 4. 数组做函数参数

一. 函数的概念

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

二. 函数的使用

1. 库函数和自定义函数

C语言中的函数也分为两种,一种是库函数,我们称它为C语言中已经实现的函数,比如像printf、scanf等函数,已经不需要程序员自己编写而是直接使用的函数。另一种是自定义函数,也就是需要程序员自己创造,自定义函数其实更加重要,也能给程序员写代码更多的创造性。

(1) 库函数

在这里要说明一下,我们使用库函数并不是简单的直接使用,每一个库函数都有它自己相应的头文件,我们只有调用出了这个头文件才能使用对应的库函数,比如我们使用printf函数,我们要在开头加上#include <stdio.h>;再者我们如果使用strlen函数,我们也要加上#include <string.h>,所以后面我们也要了解函数所对应的头文件。

(2) 自定义函数的形式

首先来讲函数的语法形式,下面给大家一张图了解清楚:在这里插入图片描述
也就说自定义函数也是有一个规范使用的格式,我们是照着这样的格式一步步去写属于我们自己的代码,比如说现在我要实现一个加法的代码,我应该怎么去写这个函数,下面给大家举一个简单的例子说明:下面展示一些 内联代码片

int Add(int x,int y)
{
  int z=0;
  z=x+y;
  return z;
}

上面的代码就是一个很简单的加法运算,int就代表我们的函数返回的类型是整形,而Add就是我们的函数名,如果后期要使用,我们就直接可以调用这个函数的名字进行使用,(int x,int y)就代表了我们要传入的形式参数,后面也会再详细教大家如何使用。

2. 形参和实参

在函数使用的过程中,把函数的参数分为,实参和形参。也就是我们在使用函数的时候,函数体本身和需要调用函数的那部分是分开的,我们也可以通过一个简单的例子向大家说明,我们还使用一个简单的加法的运算:下面展示一些 内联代码片

1 int Add(int x, int y)
2 {
3 	int z = 0;
4 	z = x + y;
5 	return z;
6 }

7 int main()
8 {
9	int a = 0;
10	int b = 0;
11	scanf("%d %d", &a, &b);
12	int r = Add(a, b);
13	printf("%d\n", r);
14	return 0;
15 }


上面就是一个简单的使用自定义函数的代码展示我们可以看到1~6行是我们Add函数的代码,而我们在第12行真正调用了这个函数,我们把函数的返回值赋给r,而也就是在这个里面我们向Add函数里面传入的a和b叫做实参实际参数就是真实传递给函数的参数。在上面代码中,第1行定义函数的时候,在函数名Add后面的x和y叫做形式参数,也叫做形参。为什么叫形式参数呢?实际上,如果只是定义了Add 后的括号中写的x和y,而不去调用这个函数的话,那么x和y就只是形式上的存在,不会向内存申请空间,不会真实存在,形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化。

3. return语句

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

4. 数组做函数参数

在使用函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进行操作。比如:写⼀个函数将⼀个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容。简单思考⼀下,基本的形式应该是这样的:下面展示一些 内联代码片

void set_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0;i < sz; i++)
	{
		arr[i] = -1;
	}
}

void printf_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	set_arr(arr, sz);    //将数组全部置换为-1
	printf_arr(arr, sz);  //打印数组内容
	return 0;
}

从代码我们可以看出来,上面的set_arr函数要能够对数组内容进行设置,就得把数组作为参数传递给函数,同时函数内部在设置数组每个元素的时候,也得遍历数组,需要知道数组的元素个数。所以我们需要给set_arr传递2个参数,⼀个是数组,另外⼀个是数组的元素个数。仔细分析print_arr也是⼀样的,只有拿到了数组和元素个数,才能遍历打印数组的每个元素。
另外我们要注意的是在调用函数的时候,我们可以只传入数组名和元素个数,但是在写函数的时候我们在前面仍然要加上类型,这里我们需要知道数组传参的几个重点知识:
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的
形参如果是⼀维数组,数组大小可以省略不写
形参如果是⼆维数组,行可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组
以上就是关于函数的部分知识,希望可以帮到大家,我也会及时更新关于函数的另一部分内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…

python flask配置数据库并进行orm操作 flask_sqlalchemy

&#x1f308;所属专栏&#xff1a;【Flask】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

LeetCode | 28.找出字符串中第一个匹配项的下标 KMP

这是字符串匹配问题&#xff0c;朴素做法是两重遍历&#xff0c;依次从主串的i位置开始查看是否和模式串匹配&#xff0c;若不匹配就换下一个位置进行判断&#xff0c;直到找到或者遍历完&#xff0c;时间复杂度 O ( m n ) O(m \times n) O(mn) 还可以对主串进行处理&#xff…

第一个 JavaFX 应用程序

在本教程中&#xff0c;我将向你展示如何创建您的第一个 JavaFX 应用程序。因此&#xff0c;本教程既可以向你介绍核心 JavaFX 概念&#xff0c;也可以为你提供一些 JavaFX 代码&#xff0c;你可以将其用作你自己的实验的模板。 JavaFX 应用程序类 JavaFX 应用程序需要一个主…

【论文复现|智能算法改进】基于多策略融合灰狼算法的移动机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.改进点 混沌反向学习策略 融合Logistic混沌映射和Tent混沌映射生成Logistic-Tent复合混沌映射: Z i 1 { ( r Z i ( 1 − Z i ) ( 4 −…

下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar操作教程

1、下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 2、截图如下

中华老字号李良济,展现百年匠心之魅力,释放千年中医药文化自信

6月14-16日&#xff0c;“潮品老字号 国货LU锋芒”江苏老字号博览会在南京隆重启幕&#xff0c;中华老字号李良济凭借过硬的品牌实力和优质的口碑再次受邀参加&#xff0c;并在展会上绽放百年匠心魅力&#xff0c;彰显千年中医药文化自信&#xff01; 百年匠心 以实力铸就荣耀…

Autosar诊断-FIM模块功能介绍

文章目录 前言一、FIM模块概述二、FID概念介绍Event ID和DTC之间的关系Event ID与FID之间的关系FIM数据结构三、FiM模块与SW-C模块交互关系四、FIM模块函数调用关系FiM功能模块作用过程前言 Autosar诊断的主体为UDS(Unified Diagnostic Services)协议,即统一的诊断服务,是…

linux如何部署前端项目和安装nginx

要在Linux上部署前端项目并安装Nginx&#xff0c;你可以按照以下步骤操作&#xff1a; 安装Nginx: sudo apt update sudo apt install nginx 启动Nginx服务: sudo systemctl start nginx 确保Nginx服务开机自启: sudo systemctl enable nginx 部署前端项目&#xff0c;假设前…

PromptMRG: Diagnosis-Driven Prompts for Medical Report Generation

文章汇总 存在的问题 罕见疾病在训练数据中的代表性不足&#xff0c;使其诊断性能不可靠。 解决办法 1&#xff1a;利用预训练的CLIP模型从数据库中检索相似的报告来辅助查询图像的诊断。 2&#xff1a;设计SDL模块根据不同疾病的学习状态自适应调整优化目标。 流程解读 文…

MPLS VPN一

R1为客户&#xff0c;现在进行一些基本配置&#xff0c;来确保可以通路由 先启动OSPF跑通 在R3上 等一会 现在启动MPLS 对R3 对R4 然后在R2上 再把接口划到空间里面 原来的IP在公网里面&#xff0c;被清除了 然后再配置接口 查看 对R1&#xff08;相当于客户&#xff09; …

2024年最易被破解的密码TOP50,你中招了吗?

今天&#xff0c;我们要聊聊一个每个人都会用到&#xff0c;但可能并不那么重视的话题——密码安全。密码&#xff0c;这个看似简单的字符组合&#xff0c;其实与我们的信息安全、财产安全密切相关。想象一下&#xff0c;如果你的手机、邮箱、银行账户等都被一个简单的密码保护…

vulnhub靶机hacksudoLPE中Challenge-1

下载地址&#xff1a;https://download.vulnhub.com/hacksudo/hacksudoLPE.zip 主机发现 目标146 端口扫描 服务扫描 漏洞扫描 上面那整出来几个洞&#xff0c;可以试试 easy&#xff1f; 估计就是看源码 看来是的 登入咯 这里进不去就是ssh咯 这个看着有点像提权的操作 一…

Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理

PreparedStatement SQL注入 执行预编译的SQL对象 这样也能登录成功 模拟 SQL注入是这个原因 现在基本上不存在SQL注入的问题 解决 SQL注入就是传一些语句导致原来的SQL语句改变了 修改代码 通过设置参数的方式 就能防止SQL注入 实际上我们进行了一个转化 将字符和关键字进…

【健身经验】3 拜拜肉

1 女性手臂粗细与紧实程度&#xff0c;除了取决于运动和生活习惯&#xff0c;很大程度上取决于遗传因素 2 2 如果体脂已经很正常了&#xff0c;整体看起来匀称不胖&#xff0c;偏偏这两块肌肉附近的脂肪“顽固不化”的话&#xff0c;可以试试以下两个简单方法 对于体脂率正常…

Python第二语言(十一、Python面向对象(下))

目录 1. 封装 1.1 私有成员&#xff1a;__成员、__成员方法 2. 继承&#xff1a;单继承、多继承 2.1 继承的基础语法 2.2 复写 & 子类使用父类成员 3. 变量的类型注解&#xff1a;给变量标识变量类型 3.1 为什么需要类型注解 3.2 类型注解 3.3 类型注解的语法 3.…

基于51单片机万年历设计—显示温度农历

基于51单片机万年历设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。…

CodeQL从入门到入土

为什么在现在写这文章 CodeQL传闻找到了Log4j的漏洞&#xff0c;这段时间上边要求&#xff0c;把公司系统内部常见的问题用CodeQL写检测脚本&#xff0c;用于系统长期检测。主要是记录这段时间的学习&#xff0c;以及自己总结的常用写法。 一个需求&#xff0c;不同人写出来的…

【数学】什么是傅里叶级数与傅里叶变换?

傅里叶级数与傅里叶变换 背景 傅里叶级数和傅里叶变换是数学和工程领域中的重要工具&#xff0c;特别是在信号处理、图像处理和物理学中。傅里叶级数用于将周期函数表示为正弦和余弦函数的和&#xff0c;而傅里叶变换用于将任意函数表示为频率的函数。 公式 傅里叶级数&…