【C语言】07.函数

server/2024/9/24 0:57:46/

一、概念

C语言的函数,有些翻译为:子程序,子程序这种翻译更加准确⼀些。
C语言中的函数就是⼀个完成某项特定的任务的⼀小段代码。这段代码是有特殊的写法和调用方法的。
C语言的程序其实是由无数个小的函数组合而成的,也可以说:⼀个大的计算任务可以分解成若干个较小的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以用的,提升了开发软件的效率

在C语言中我们⼀般会见到两类函数:
• 库函数
• 自定义函数

二、库函数

C语言标准中规定了C语言的各种语法规则,C语言并不提供库函数;C语言的国际标准ANSI C规定了⼀些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSI提供的C语言标准就给出了⼀系列函数的实现。这些函数就被称为库函数。
我们可以从这个网站详细学习
库函数是在标准库中对应的头文件中声明的,所以库函数的使用,务必包含对应的头文件,不包含是可能会出现⼀些问题的。

三、自定义函数

除了库函数外,还有自定义函数,它为程序员提供了很强的可操作性。自定义函数形式如下:

ret_type fun_name(形式参数)
{
}

例如:实现加法:

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

四、形参与实参

实参:在调用函数时传递的参数,就是真实传递的参数
形参:像上述代码中x,y这样的变量称为形式参数。形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形式的实例化。
在这里插入图片描述
通过调试我们可以知道:形参是实参的一份临时拷贝

五、return语句

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

六、数组做函数参数

我们需要知道数组做形参的几个知识点:
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的
• 形参如果是⼀维数组,数组大小可以省略不写
• 形参如果是⼆维数组,行可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组

七、嵌套调用与链式访问

嵌套调用就是函数之间的互相调用。
链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。

#include <stdio.h>
int main()
{printf("%d", printf("%d", printf("%d", 43))); //打印结果:4321return 0;
}

八、函数声明与定义

8.1单个文件

#include<stdio.h>//函数定义
int Add(int x,int y);int main()
{int a=10,b=2;int c=Add(a,b);//函数调用printf("%d",c);return 0;
}
//函数声明
int Add(int x,int y)
{return x+y;
}

函数的定义也是⼀种特殊的声明,所以如果函数定义放在调用之前也是可以的。

8.2多个文件

⼀般在企业中我们写代码时候,代码可能比较多,不会将所有的代码都放在⼀个文件中;我们往往会根据程序的功能,将代码拆分放在多个文件中。
⼀般情况下,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)⽂件中。

九、static 和 extern

staticextern 都是C语言中的关键字。
static 是 静态的 的意思,可以用来:
• 修饰局部变量
• 修饰全局变量
• 修饰函数
extern 是用来声明外部符号的。

在讲解这两个关键字之前,我们先来聊一聊作用域与生命周期。

作用域是限定的名字能够使用的范围。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程(项目)。

生命周期指变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

  1. 局部变量的⽣命周期是:进⼊作用域变量创建,生命周期开始,出作用域生命周期结束。
  2. 全局变量的⽣命周期是:整个程序的生命周期。

在这里插入图片描述
未来⼀个变量出了函数后,我们还想保留值,等下次进入函数继续使用,就可以使用static修饰。

extern是用来声明外部符号的,如果⼀个全局的符号在A文件中定义的,在B文件中想使用,就可以使用 extern 进行声明,然后使用。但是static只能在当前文件中使用。
⼀个函数只想在所在的源文件内部使用,不想被其他源文件使用,就可以使用 static 修饰。


http://www.ppmy.cn/server/48385.html

相关文章

动手学深度学习—序列数据与语言模型

动手学深度学习—序列数据与语言模型 序列模型 时序模型中&#xff0c;当前数据跟之前观察到的数据相关 统计工具 处理序列数据需要统计工具和新的深度神经网络架构&#xff1a; 问题的提出&#xff1a;围绕着如何有效估计 &#xff1a; P ( x t ∣ x t − 1 , … , x 1 ) P\…

代码随想录算法训练营第五十五 | ● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> d…

Qt Graphics View Framework 使用教程

欢迎来到 Qt Graphics View Framework 的世界&#xff01;本教程将引导您了解这一强大工具的基础知识&#xff0c;并教您如何开始使用它来创建丰富的 2D 图形界面。无论您是编程新手还是经验丰富的开发者&#xff0c;本教程都将帮助您快速上手。 基本概念 Qt Graphics View F…

实用小工具-python esmre库实现word查找

python esmre库实现word查找 前言&#xff1a; 在文本中匹配特定的字符串&#xff0c;一般可以用普通的字符串匹配算法&#xff0c;KMP算法&#xff1b; python中提供了一个库&#xff0c;esmre, 通过预先将字符串存到esm对象中&#xff0c;利用这些字符串从候选的字符串中进行…

node.js学习

node.js学习实操及笔记 温故node.js&#xff0c;node.js学习实操过程及笔记~ node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记 为什么学node.js 可以让别人访问我们编写的网页为后续的框架学习打下基础&#xff0c;三大框架vue react angular离不开node.js …

车载诊断架构 - 引导诊断

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

[大模型]Llama-3-8B-Instruct FastApi 部署调用

环境准备 在 Autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu22.04)-->12.1。 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行演示。 pip 换源…

DP动态规划(下)

文章目录 如何在动态规划中有效地使用std::unordered_map?以下是使用std::unordered_map进行动态规划的一些关键点&#xff1a;选择合适的键&#xff1a;考虑哈希冲突&#xff1a;优化哈希函数&#xff1a; 下面是一个使用std::unordered_map解决斐波那契数列问题的例子&#…