📜  C-函数(1)

📅  最后修改于: 2023-12-03 14:59:52.535000             🧑  作者: Mango

C 函数

函数是 C 语言的重要组成部分,是可重用的代码块,它使得程序的逻辑结构更加清晰,方便阅读和维护。C 函数有以下特点:

  1. 函数有名字,以便程序可以调用它们。
  2. 函数通常有输入(即参数)和输出(即返回值)。
  3. 函数可以被其他函数调用多次。
  4. 可以在函数内部定义局部变量,而这些变量的值在函数结束时会被自动销毁。
函数的定义

C 函数的一般形式如下:

返回类型 函数名(参数列表) {
    // 函数体
    return 返回值;
}
  • 返回类型:函数返回值类型。默认情况下,函数返回 int 类型。
  • 函数名:函数的名称,用来调用该函数。
  • 参数列表:传递给函数的参数。如果没有参数,则使用空括号。
  • 函数体:函数的处理逻辑和控制流程。
  • 返回值:函数返回的值。如果函数没有返回值,则使用 void

例如,以下是一个将两个整数相加并返回结果的函数:

int add(int a, int b) {
    int sum = a + b;
    return sum;
}

我们可以在其他函数中调用 add 函数,并将其返回值存储在变量中:

int main() {
    int a = 5, b = 3;
    int c = add(a, b);  // 调用 add 函数并将其返回值存储在 c 中
    printf("%d\n", c);  // 输出 8
    return 0;
}
函数参数

函数可以有零个、一个或多个参数,每个参数用逗号隔开,格式如下:

返回类型 函数名(类型1 参数1, 类型2 参数2, ...) {...}

参数列表用括号括起来,可以包含任意数量的参数,例如:

void print_star() {
    printf("**********\n");
}

void print_n_chars(char ch, int n) {
    int i;
    for (i = 0; i < n; i++) {
        printf("%c", ch);
    }
    printf("\n");
}

int main() {
    print_star();  // 输出 10 个星号字符
    print_n_chars('*', 5);  // 输出 5 个星号字符
    return 0;
}
函数返回值

函数可以返回一个值,也可以没有返回值。如果没有返回值,则返回类型应该为 void;如果有返回值,则需要在函数体中使用 return 语句返回一个值,例如:

int max(int a, int b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

void print_hello() {
    printf("Hello, world!\n");
}

int main() {
    int a = 4, b = 7;
    int c = max(a, b);    // 返回较大的数
    printf("The max of %d and %d is %d\n", a, b, c);
    print_hello();        // 不返回任何值
    return 0;
}
局部变量

函数可以在其定义的范围内定义局部变量,这些变量只能在函数内部使用,不能在其他函数或全局范围内使用。局部变量的作用域从定义开始,到函数结束。

int add(int a, int b) {
    int sum = a + b;  // 定义局部变量 sum
    return sum;
}

int main() {
    int a = 3, b = 4;
    int sum = add(a, b);
    printf("%d + %d = %d\n", a, b, sum);  // 输出 "3 + 4 = 7"
    // printf("%d\n", sum);  // 这里不能使用 sum,因为 sum 是 add 函数的局部变量
    return 0;
}
全局变量

全局变量定义在函数外部,它与所有函数都有关,因此可以在任意函数中使用。

int g_count = 0;  // 定义全局变量

void increase_count() {
    g_count++;  // 在函数中使用全局变量
}

int main() {
    increase_count();
    increase_count();
    printf("The count is %d\n", g_count);  // 输出 "The count is 2"
    return 0;
}
函数指针

在 C 语言中,函数也可以被视为一种数据类型。我们可以将函数名作为指针变量来使用,或使用 typedef 关键字定义函数指针类型。示例代码如下:

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

int subtract(int a, int b) {
    return a - b;
}

typedef int (*calc_func_t)(int, int);  // 定义函数指针类型

int main() {
    calc_func_t p_add = add;          // 声明函数指针并初始化
    calc_func_t p_subtract = subtract;
    int result1 = p_add(3, 4);        // 使用函数指针调用函数
    int result2 = p_subtract(10, 5);
    printf("%d, %d\n", result1, result2);  // 输出 "7, 5"
    return 0;
}
预定义函数

C 标准库中有许多预定义函数,可以直接在程序中使用。例如,printfscanfmallocstrlen 等函数都是预定义函数。需要在程序开头包含相应的头文件,例如:

#include <stdio.h>    // 标准输入输出库头文件
#include <stdlib.h>   // 标准库头文件
#include <string.h>   // 字符串处理头文件

int main() {
    printf("Hello, world!");    // 输出 "Hello, world!"
    char *str = malloc(100);    // 动态分配内存
    strcpy(str, "Hello");       // 复制字符串
    strcat(str, ", world!");    // 连接字符串
    printf("%s\n", str);        // 输出 "Hello, world!"
    free(str);                  // 释放动态分配的内存
    return 0;
}
小结

本文介绍了 C 函数的基本特点、定义、参数、返回值、局部变量、全局变量、函数指针和预定义函数等概念。C 语言中的函数是可重用的代码块,可以使程序更模块化和可维护。函数的灵活运用是 C 语言编程的关键之一。