CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
C 语言入门/课时/函数
RawBlame
课时目录12 节

C 语言入门

  1. 01C 是什么
  2. 02类型与变量
  3. 03控制流与运算符
  4. 04函数
  5. 05指针与内存
  6. 06数组与字符串
  7. 07结构体与联合体
  8. 08预处理器
  9. 09编译与构建
  10. 10并发与进程
  11. 11调试与测试
  12. 12综合练习

函数

声明/定义、递归、函数指针。

30 分钟

函数

函数是 C 组织逻辑的基本单元。对照 /roadmaps/c,本课涵盖声明与定义、值传递、递归及函数指针——后续回调与数据结构的基础。

学习目标

  • 区分函数声明、定义与原型
  • 理解 C 的值传递语义
  • 编写递归函数
  • 初步使用函数指针

核心概念

声明、定义与调用

#include <stdio.h>

/* 声明(原型):编译器据此检查调用 */
int add(int a, int b);
void greet(const char *name);

/* 递归:阶乘 */
long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

/* 定义 */
int add(int a, int b) {
    return a + b;
}

void greet(const char *name) {
    printf("Hello, %s\n", name);
}

/* 函数指针:排序比较器风格 */
typedef int (*compare_fn)(int, int);

int ascending(int a, int b)  { return a - b; }
int descending(int a, int b) { return b - a; }

int pick_max(int a, int b, compare_fn cmp) {
    return cmp(a, b) >= 0 ? a : b;
}

int main(void) {
    int x = 10, y = 20;
    printf("add=%d\n", add(x, y));
    greet("CodeRoadMap");

    int arr[] = {3, 1, 4, 1, 5};
    int len = sizeof arr / sizeof arr[0];
    int max_val = arr[0];
    for (int i = 1; i < len; i++) {
        max_val = pick_max(max_val, arr[i], ascending);
    }

    printf("fact(5)=%ld max=%d pick=%d\n",
           factorial(5), max_val, pick_max(3, 7, descending));
    return 0;
}

关键规则

概念说明
值传递修改形参不影响实参(指针除外)
const T *指向只读数据,类似 Java 不可变引用
static 函数文件内可见,类似 Java private 方法
无重载C 不支持同名不同参;C++ 可以

头文件(.h)放声明,源文件(.c)放定义——多文件项目的标准模式。

与 C++/Java 对照

特性CC++Java
成员函数无有方法
重载无有有
默认参数无有有
函数指针核心机制可用 + 可调用对象仅函数式接口/反射
递归支持支持支持

Java 方法属于类;C 函数是文件级或 static 文件私有。C++ 可混用自由函数与成员函数。

练习

  • 写 int max3(int a, int b, int c) 返回最大值
  • 用递归实现斐波那契第 n 项(思考效率问题)
  • 声明函数指针 void (*handler)(int),并赋值为打印函数
  • 将 add 的声明放入 math.h,定义放入 math.c

小结

C 函数简单直接;函数指针是回调与泛型风格的 C 式实现。 下一课进入指针与内存。

加载本节练习…
← 上一课控制流与运算符下一课 →指针与内存