c语言函数学习

C语言函数学习笔记:从入门到实践

一、什么是函数?

函数是C语言中用于封装特定功能的代码块,是模块化编程的核心。通过函数可以实现:

代码复用:避免重复编写相同逻辑

逻辑清晰:将复杂程序分解为多个小模块

易于维护:修改功能时只需调整对应函数

二、函数的基本语法

  1. 函数定义
c 复制代码
c

返回类型 函数名(参数列表) {
    // 函数体
    return 返回值; // void类型可省略
}

示例:

c 复制代码
c

// 计算两个整数的和
int add(int a, int b) {
    return a + b;
}
  1. 函数声明(原型)
    在调用函数前需要声明(通常在头文件或文件顶部):
c 复制代码
c

返回类型 函数名(参数类型列表);
示例:

c

c 复制代码
int add(int, int); // 参数名可省略
  1. 函数调用
c 复制代码
int result = add(3, 5); // 结果 = 8

三、参数传递机制

  1. 值传递(默认方式)
    传递参数的副本,原变量不受影响
c 复制代码
void swap(int x, int y) {
    int temp = x;
    x = y;
    y = temp; // 不影响调用处的变量
}
  1. 指针传递(修改原变量)
    传递变量地址,可直接操作内存
c 复制代码
void real_swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp; // 实际交换原变量值
}

四、特殊函数类型

  1. 递归函数
    函数调用自身,需设置终止条件

c

c 复制代码
// 计算阶乘(5! = 120)
int factorial(int n) {
    if(n <= 1) return 1; // 终止条件
    else return n * factorial(n-1);
}
  1. 回调函数
    通过函数指针传递函数作为参数
c 复制代码
void process(int a, int b, int (*callback)(int, int)) {
    printf("Result: %d\n", callback(a, b));
}

// 调用示例

c 复制代码
process(10, 5, add); // 输出15

五、函数使用注意事项

避免全局变量:尽量使用参数传递数据

单一职责原则:一个函数只做一件事

参数校验:对指针参数做NULL判断

c 复制代码
void print_array(int *arr, int size) {
    if(arr == NULL) {
        printf("Invalid pointer!");
        return;
    }
    // ...
}

递归深度:防止栈溢出(可用迭代替代)

命名规范:使用动词+名词(如 calculate_sum)

六、常见错误

❌ 未声明直接调用函数

❌ 返回值类型与声明不一致

❌ 忘记return语句(非void函数)

❌ 修改局部变量的地址(函数退出后失效)

七、实战建议

多用静态函数:用static限制函数作用域(模块化开发)

利用宏函数:简单操作用宏实现(注意副作用)

c 复制代码
#define MAX(a,b) ((a)>(b)?(a):(b))

调试技巧:在函数入口/出口添加日志

c 复制代码
void critical_func() {
    printf("[DEBUG] Enter function\n");
    // ...核心代码...
    printf("[DEBUG] Exit function\n");
}

总结:

函数是C语言的灵魂,掌握函数的使用是进阶开发的基础。理解参数传递机制、熟练使用递归和回调函数,能显著提升代码质量。建议多通过实际项目练习函数设计,例如实现:

计算器程序(函数封装运算)

文件处理器(回调处理不同文件类型)

算法模块(递归实现二叉树遍历)

相关推荐
M78佐菲1 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
aramae3 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
无敌贵点大王3 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
是翎5 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky5 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手6 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
Escalating_xu8 小时前
【C 语言项目】数组和函数综合实践:从零实现控制台扫雷游戏
c语言
AI职业加油站9 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
啄缘之间9 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva