第八讲:函数:解锁 C 语言函数的 “模块化密码”—— 概念、应用与底层逻辑解析
2026/6/15 9:12:15 网站建设 项目流程

本文Gitee链接———2025.5.29、5.30.static关键字————Blog code: 本仓库仅用于存放博客上的代码

我们早在数学中见过函数的概念:⼀次函数 y = kx + b ,k 和 b 都是常数,给⼀个任意的 x,就得到⼀个 y 值。

函数一词源于清代,中国数学家 李善兰 在19 世纪中叶翻译英国数学家乔治・皮科克(George Peacock)的《代数学》时,将 “function” 译为 “函数”。

“函” 字在汉语中有 “匣子”“容器” 之意(如 “函套”),李善兰取 “包含”“对应” 之义,用 “函数” 表示一个量(自变量)通过某种规则 “包含” 或 “决定” 另一个量(因变量),即 “凡此变数中函彼变数者,则此为彼之函数”(《代数学》序)。

因此,在数学中,函数指的是⼀个完成某项特定的任务的⼀个表达式。
在C语言中,函数指的是⼀个完成某项特定的任务的⼀小段代码,故有人将C语言的函数概念翻译为:子程序,其实子程序这种翻译更加准确⼀些,
C语言的程序其实是由无数个小的函数组合而成的,也可以说:⼀个大的计算任务可以分解成若干个较小的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复用的提升了开发软件的效率
C语言的函数就像是可以复用的“模块化工厂”。

一、函数:编程世界的 “模块化工厂

核心类比

  • 函数 = 工厂工厂接收原材料输入参数),通过生产线加工函数体),产出产品返回值)。
  • 程序 = 工厂集群复杂任务分解为多个小工厂协作,每个工厂专注解决一个具体问题(如计算、数据处理),提升效率和复用性。

1. 库函数(预制工厂)

定义:由 C 语言标准规定、编译器厂商实现的“现成工厂”,如printf(打印工厂)、sqrt(平方根工厂)。

特点无需自己搭建,直接调用,但需知道 “工厂地址”(包含对应头文件,如#include <math.h>)。

使用步骤

  1. 查文档(如cppreferencehttps://zh.cppreference.com/w/c/header这个有搜索功能,上面的没有https://legacy.cplusplus.com/reference/clibrary/
  2. 了解工厂功能(函数功能)、原料类型(参数)、产品类型(返回值)。

栗子sqrt:

图中的小绿字:

double sqrt (double x);是函数原型,

sqrt指的是函数名,x是参数,表示调用sqrt函数需要传递一个double类型的值,

第一个double指的是返回值的类型,第二个double指的是参数的类型

而我们点击上面的链接进行学习了解库函数时,这些文档从上往下的一般格式是:

  1. 函数原型
  2. 函数功能介绍
  3. 参数返回类型
  4. 代码栗子和运行结果
  5. 相关相似知识链接

我们使用上面的两个链接时,可以在第二个链接查找,知道了这个库函数的头文件之后去第一个链接浏览(因为一般的网页都会有翻译的提示,点击一下就全翻译为中文了)

如果你觉得有点麻烦,那就对了,根本不用点击那两个网站直接问一下AI就行了

2. 自定义函数(自建工厂)

定义:根据需求自己设计的工厂,语法结构:

产品类型 工厂名(原料类型1 原料名1, 原料类型2 原料名2) { 函数体逻辑; ———— 加工步骤 return 最终产品; ———— 没有产品时用void }

栗子:设计加法工厂Add

int Add(int a, int b)————接收两个整数原料 { return a + b;————加工后返回和 } 调用:int sum = Add(3, 5); ————输入3和5,得到8

设计不需要返回值的函数:

void dayin (int a) { printf("%d\n",a); return ; }

设计函数需要设计这四个部分:

  1. 原材料输入参数参数部分需要交代清楚:参数个数,每个参数的类型是啥,形参的名字叫啥
  2. 工厂名(函数名
  3. 生产线加工函数体
  4. 产出的产品返回值
大体是这四个部分,不过以后我们根据实际需要来设计函数,函数名、参数、返回类型都是可以灵活变化的

二、函数的形参与实参

先来个栗子:

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int Add(int x, int y) { return x + y; } int main() { int a; int b; scanf("%d %d", &a, &b); int c = Add(a, b); printf("%d",c); return 0; }
 在上⾯代码中,先是 Add 函数的定义,有了函数后,再在main函数里调用Add函数。我们把调用Add函数时,传递给函数的参数a和b,称为实际参数,简称实参。 
实际参数就是真实传递给函数的参数。
在上面代码中,定义函数的时候,在函数名Add后的括号中写的xy,称为形式参数,简称形参。
为什么叫形式参数呢?实际上,如果只是定义了 Add 函数,⽽不去调用的话, Add 函数的参数 x
和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间

核心类比(当“原料”不是数组时)

  • 实参 = 原件:调用函数时传递的真实数据(如变量a的值)。
  • 形参 = 复印件:函数内部用于临时存储数据的 “副本”,与原件独立存放。在没有调用函数时,不会向内存申请空间,不会真实存在,只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间
    • 关键点修改复印件不影响原件,不调用函数时不需要复印件,因此不会向内存申请空间

栗子:

void Change(int x)————x是复印件 { x = 100;————仅修改复印件 } int main() { int a = 5;————原件 Change(a);————传递原件,函数内生成x=5的复印件

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询