本文Gitee链接———2025.5.29、5.30.static关键字————Blog code: 本仓库仅用于存放博客上的代码
我们早在数学中见过函数的概念:⼀次函数 y = kx + b ,k 和 b 都是常数,给⼀个任意的 x,就得到⼀个 y 值。
函数一词源于清代,中国数学家 李善兰 在19 世纪中叶翻译英国数学家乔治・皮科克(George Peacock)的《代数学》时,将 “function” 译为 “函数”。
“函” 字在汉语中有 “匣子”“容器” 之意(如 “函套”),李善兰取 “包含”“对应” 之义,用 “函数” 表示一个量(自变量)通过某种规则 “包含” 或 “决定” 另一个量(因变量),即 “凡此变数中函彼变数者,则此为彼之函数”(《代数学》序)。
一、函数:编程世界的 “模块化工厂”
核心类比
- 函数 = 工厂:工厂接收原材料(输入参数),通过生产线加工(函数体),产出产品(返回值)。
- 程序 = 工厂集群:复杂任务分解为多个小工厂协作,每个工厂专注解决一个具体问题(如计算、数据处理),提升效率和复用性。
1. 库函数(预制工厂)
定义:由 C 语言标准规定、编译器厂商实现的“现成工厂”,如printf(打印工厂)、sqrt(平方根工厂)。
特点:无需自己搭建,直接调用,但需知道 “工厂地址”(包含对应头文件,如#include <math.h>)。
使用步骤:
- 查文档(如cppreference
https://zh.cppreference.com/w/c/header这个有搜索功能,上面的没有
https://legacy.cplusplus.com/reference/clibrary/)
- 了解工厂功能(函数功能)、原料类型(参数)、产品类型(返回值)。
栗子sqrt:
图中的小绿字:
double sqrt (double x);是函数原型,
sqrt指的是函数名,x是参数,表示调用sqrt函数需要传递一个double类型的值,
第一个double指的是返回值的类型,第二个double指的是参数的类型
而我们点击上面的链接进行学习了解库函数时,这些文档从上往下的一般格式是:
- 函数原型
- 函数功能介绍
- 参数返回类型
- 代码栗子和运行结果
- 相关相似知识链接
我们使用上面的两个链接时,可以在第二个链接查找,知道了这个库函数的头文件之后去第一个链接浏览(因为一般的网页都会有翻译的提示,点击一下就全翻译为中文了)
如果你觉得有点麻烦,那就对了,根本不用点击那两个网站直接问一下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 ; }设计函数需要设计这四个部分:
- 原材料(输入参数)参数部分需要交代清楚:参数个数,每个参数的类型是啥,形参的名字叫啥
- 工厂名(函数名)
- 生产线加工(函数体)
- 产出的产品(返回值)
二、函数的形参与实参
先来个栗子:
#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; }核心类比(当“原料”不是数组时)
- 实参 = 原件:调用函数时传递的真实数据(如变量
a的值)。 - 形参 = 复印件:函数内部用于临时存储数据的 “副本”,与原件独立存放。在没有调用函数时,不会向内存申请空间,不会真实存在,只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间
- 关键点:修改复印件不影响原件,不调用函数时不需要复印件,因此不会向内存申请空间。
栗子:
void Change(int x)————x是复印件 { x = 100;————仅修改复印件 } int main() { int a = 5;————原件 Change(a);————传递原件,函数内生成x=5的复印件