news 2026/10/19 7:19:54

函数 函数 函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
函数 函数 函数
  1. 函数的概念
  2. 库函数
  3. 自定义函数
  4. 形参和实参
  5. return语句
  6. 数组做函数参数
  7. 嵌套调用和链式访问
  8. 函数的声明和定义

1. 函数的概念

C语言中函数的概念可以理解为子程序:函数就是一段用于完成某项特定任务的代码。
C语言的程序实际上是由无数个小的函数组合而成的。也可以说,一个大的计算任务可以被分解成若干个较小的函数(对应较小的任务)来完成。
在C语言中我们一般会见到两类函数:
• 库函数
• 自定义函数

2. 库函数

2.1 标准库和头文件

C语言标准中规定了C语言的各种语法规则,但C语言本身并不提供库函数。C语言的国际标准ANSI C规定了一些常用函数的标准,这些标准被称为标准库。不同的编译器厂商根据ANSI提供的C语言标准,给出了一系列函数的实现,这些函数就被称为库函数。

各种编译器的标准库中提供了一系列库函数,这些库函数根据功能的不同,分别在不同的头文件中进行了声明。## 2.2 库函数的使用方法
C/C++官方的链接:https://zh.cppreference.com/w/c/header
cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

2.2.1 功能

Computesquareroot计算平方根
Returns the square root of x.(返回平方根)

2.2.2 头文件包含

库函数是在标准库中对应的头文件中声明的,因此使用库函数时务必包含对应的头文件,否则可能会出现一些问题。### 2.2.3 实践

2.2.4 库函数文档的一般格式

  1. 函数原型
  2. 函数功能介绍
  3. 参数和返回类型说明
  4. 代码举例
  5. 代码输出
  6. 相关知识链接

3. 自定义函数

3.1 函数的语法形式




3.2 函数的举例

写一个加法函数,完成2个整型变量的加法操作。


Add函数也可以简化为:

4. 形参和实参

4.1 实参

在调用Add函数时,传递给函数的参数a和b被称为实际参数,简称实参。实参就是真实传递给函数的参数。## 4.2 形参
在上面代码中定义函数的时候,在函数名Add后的括号中写的x和y,称为形式参数,简称形参。
形式参数:如果只是定义了Add函数,而不去调用的话,Add函数的参数x和y只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。形式参数只是在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化。

4.3 实参和形参的关系

实参和形参之间存在联系,但是形参和实参各自是独立的内存空间。


x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不一样
的,所以我们可以理解为形参是实参的一份临时拷贝。

5. return 语句

return语句执行后,函数就彻底返回,后边的代码不再执行。

return返回的值和函数返回类型不一致,系统会自动将返回的值隐式转换为函数的返回类型。

如果函数中存在 if 等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

6. 数组做函数参数

写一个函数将一个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容。

7. 嵌套调用和链式访问

7.1 嵌套调用

嵌套调用就是函数之间的互相调用,正是因为函数之间有效的互相调用,最后写出来了相对大型的程序。

假设我们计算某年某⽉有多少天?如果要函数实现,可以设计2个函数:
• is_leap_year():根据年份确定是否是闰年
• get_days_of_month():调⽤is_leap_year确定是否是闰年后,再根据⽉计算这个⽉的天数


未来的稍微⼤⼀些代码都是函数之间的嵌套调⽤,但是函数是不能嵌套定义的。

7.2 链式访问

所谓链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。

printf 函数返回的是打印在屏幕上的字符的个数。
上⾯的例⼦中,我们就第⼀个printf打印的是第⼆个printf的返回值,
第⼆个printf打印的是第三个printf的返回值。
第三个printf打印43,在屏幕上打印2个字符,再返回2
第⼆个printf打印2,在屏幕上打印1个字符,再返回1
第⼀个printf打印1
所以屏幕上最终打印:4321

8. 函数的声明和定义

8.1 单个文件

写⼀个函数判断⼀年是否是闰年。

函数的调⽤⼀定要满⾜,先声明后使⽤;
声明函数只要交代清楚:函数名,函数的返回类型,函数的参数。函数声明中参数只保留类型,省略掉名字也是可以的。

8.2 多个文件

⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中。


8.3 static 和extern

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

作⽤域和⽣命周期。

8.3.1 static 修饰局部变量

使⽤建议:未来⼀个变量出了函数后,我们还想保留值,等下次进⼊函数继续使⽤,就可以使⽤static修饰。

代码2使用了static导致第一次n++之后的值11得以保留,所以第二次循环的时候n的值变为了11并循环+1,直至i=4停止循环。

8.3.2 static 修饰全局变量

使⽤建议:如果⼀个全局变量,只想在所在的源⽂件内部使⽤,不想被其他⽂件发现,就可以使⽤static修饰。

8.3.3 static 修饰函数

使⽤建议:⼀个函数只想在所在的源⽂件内部使⽤,不想被其他源⽂件使⽤,就可以使⽤static修饰。

代码1

代码2

代码1是能够正常运⾏的,但是代码2就出现了链接错误。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 7:19:36

DeepSeek LeetCode 384. 打乱数组 Java实现

LeetCode 384. 打乱数组 Java 实现 这道题的核心是 Fisher–Yates 洗牌算法(也叫 Knuth 洗牌算法),它能保证 n! 种排列等概率出现。 关键点 保存原始数组的副本:reset() 要能恢复到初始状态,所以构造时必须克隆一份 or…

作者头像 李华
网站建设 2026/10/19 7:18:38

《Attention Is All You Need》背景

2017 年谷歌发表论文《Attention Is All You Need》,当时并没有溅出一点水花,后来统治llm世界也是一段魔幻过程,我采集了下它的背后故事。 1. 差点没发出去 《Attention Is All You Need》的作者之一 Jakob Uszkoreit 后来在采访里说过&#…

作者头像 李华
网站建设 2026/10/19 7:17:57

【仿真】液冷板流道拓扑优化的思路与效果

摘要 液冷板流道设计本质上是压降与温差的权衡问题。本文从优化目标设定、拓扑优化算法选型、网格与求解器设置、多工况校核四个环节梳理液冷板流道拓扑优化的完整流程,并结合并联水道与串流道的对比说明优化收益的实际边界,可用于液冷板设计前期的方案…

作者头像 李华
网站建设 2026/10/19 7:15:26

图论开篇:DFS与回溯求解所有可达路径的完整指南

今天训练营走到第四十九天,正式开了图论这个大头。前面连续刷了十几天的动态规划,思路一下从“状态转移”切到“图的深搜”,说实话第一天有点被搞懵。不过今天这道卡码网 98 题《所有可达路径》属于图论里最典型、最值得反复吃透的入门题&…

作者头像 李华
网站建设 2026/10/19 7:15:22

Python aiida-optimade 包实战案例与常见错误

1. 引言aiida-optimade 是一个连接 AiiDA 数据库与 OPTIMADE 标准的 Python 插件包。它让材料科学研究者能够通过统一的 OPTIMADE REST API 接口,对外发布 AiiDA 中存储的晶体结构、计算任务和计算结果数据,同时也能让外部客户端通过标准查询语法检索这些…

作者头像 李华