跳转到内容

C 语言函数基础

来自代码酷

C语言函数基础[编辑 | 编辑源代码]

函数是C语言程序的基本构建模块,它允许将代码组织成可重用的逻辑单元。理解函数的概念对于编写结构化、模块化和高效的C程序至关重要。

什么是函数?[编辑 | 编辑源代码]

在C语言中,函数是一组执行特定任务的语句集合,具有以下特点:

  • 可以接受输入参数
  • 可以返回一个值(或void表示不返回)
  • 可以被多次调用
  • 有助于代码重用和模块化

函数的基本语法结构如下:

返回类型 函数名(参数列表) {
    // 函数体
    return 返回值; // 如果返回类型不是void
}

函数组成部分[编辑 | 编辑源代码]

1. 函数声明[编辑 | 编辑源代码]

函数声明(也称为函数原型)告诉编译器函数的名称、返回类型和参数。

int add(int a, int b); // 声明

2. 函数定义[编辑 | 编辑源代码]

函数定义包含实际的函数实现。

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

3. 函数调用[编辑 | 编辑源代码]

通过函数名和适当的参数来调用函数。

int result = add(3, 5); // 调用

函数参数传递[编辑 | 编辑源代码]

C语言支持两种参数传递方式:

1. 传值调用 (Call by Value)[编辑 | 编辑源代码]

默认方式,函数接收参数的副本,原始值不会被修改。

void increment(int x) {
    x++; // 不影响原始值
}

2. 传引用调用 (Call by Reference)[编辑 | 编辑源代码]

通过指针传递地址,可以修改原始值。

void increment(int *x) {
    (*x)++; // 修改原始值
}

返回值[编辑 | 编辑源代码]

函数可以返回一个值,使用return语句:

int max(int a, int b) {
    return (a > b) ? a : b;
}

如果函数不返回任何值,返回类型应为void:

void printHello() {
    printf("Hello, World!\n");
}

递归函数[编辑 | 编辑源代码]

函数可以调用自身,称为递归。例如计算阶乘:

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}
</mermaid>

递归过程可以用mermaid图表示

<mermaid>
graph TD
    A[factorial(3)] --> B[3 * factorial(2)]
    B --> C[2 * factorial(1)]
    C --> D[1]
    D --> E[2 * 1 = 2]
    E --> F[3 * 2 = 6]
</mermaid>

== 实际应用案例 ==

考虑一个银行账户管理系统中的函数示例

<syntaxhighlight lang="c">
#include <stdio.h>

// 函数声明
void displayBalance(float balance);
float deposit(float balance, float amount);
float withdraw(float balance, float amount);

int main() {
    float balance = 1000.0;
    
    displayBalance(balance);
    balance = deposit(balance, 500.0);
    balance = withdraw(balance, 200.0);
    displayBalance(balance);
    
    return 0;
}

// 显示余额
void displayBalance(float balance) {
    printf("当前余额: $%.2f\n", balance);
}

// 存款
float deposit(float balance, float amount) {
    if (amount > 0) {
        balance += amount;
        printf("成功存入 $%.2f\n", amount);
    } else {
        printf("存款金额必须为正数\n");
    }
    return balance;
}

// 取款
float withdraw(float balance, float amount) {
    if (amount > 0 && amount <= balance) {
        balance -= amount;
        printf("成功取出 $%.2f\n", amount);
    } else {
        printf("取款失败: 金额无效或余额不足\n");
    }
    return balance;
}

输出示例:

当前余额: $1000.00
成功存入 $500.00
成功取出 $200.00
当前余额: $1300.00

数学函数示例[编辑 | 编辑源代码]

C标准库提供了许多数学函数,例如计算平方根:

#include <stdio.h>
#include <math.h>

int main() {
    double x = 16.0;
    double result = sqrt(x);
    printf("√%.2f = %.2f\n", x, result);
    return 0;
}

输出:

√16.00 = 4.00

数学公式可以表示为:x=y 当 y2=x

最佳实践[编辑 | 编辑源代码]

1. 单一职责原则:每个函数应该只做一件事 2. 合理的命名:函数名应清晰表达其功能 3. 适当的长度:函数体不宜过长(通常不超过一屏) 4. 注释文档:为复杂函数添加注释说明 5. 参数检查:验证输入参数的合法性

常见错误[编辑 | 编辑源代码]

  • 忘记返回非void函数的返回值
  • 函数声明与定义不匹配
  • 递归函数缺少终止条件导致无限递归
  • 修改了应该保持不变的参数(传值调用时)

总结[编辑 | 编辑源代码]

函数是C语言编程的核心概念,掌握函数的使用对于编写结构良好、可维护的代码至关重要。通过将程序分解为多个函数,可以提高代码的可读性、可重用性和可测试性。