C语言中的函数

函数是C语言中的基本构建块,用于封装一段可以重复使用的代码。函数允许参数传递和返回值,使得代码模块化和重用。

函数的定义和调用

函数定义

函数定义包括返回类型、函数名、参数列表和函数体。

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

函数调用

调用函数时,只需要提供函数名和相应的参数(如果有的话)。

函数名(参数1值, 参数2值, ...);

参数传递

值传递

值传递是C语言中默认的参数传递方式。它将实际参数的值复制到函数的形参中。

void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    // a和b的改变不会影响原始变量
}

int main() {
    int x = 5, y = 10;
    swap(x, y);
    // x和y的值不会改变
    printf(x, y);
    return 0;
}

地址传递

地址传递通过传递变量的地址来允许函数直接修改原始变量。

void increment(int *ptr) {
    (*ptr)++; // 增加指针指向的值
}

int main() {
    int value = 5;
    increment(&value);
    // value现在是6
    printf(value)
    return 0;
}

函数的返回值

函数可以通过返回语句返回一个值给调用者。

int max(int a, int b) {
    return (a > b) ? a : b; // 返回两个数中较大的一个
}

int main() {
    int result = max(10, 20);
    // result现在是20
    printf(result)
    return 0;
}

代码示例说明

以下是一些具体的代码示例,展示如何定义和调用函数,以及参数传递和返回值的使用。

#include <stdio.h>

// 无参无返回值函数
void greet() {
    printf("Hello, World!\n");
}

// 有参无返回值函数(值传递)
void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    printf("Inside swap function: a = %d, b = %d\n", a, b);
}

// 无参有返回值函数
int square() {
    return 5 * 5; // 返回25
}

// 有参有返回值函数(值传递)
int add(int x, int y) {
    return x + y; // 返回两数之和
}

// 有参有返回值函数(地址传递)
void increment(int *ptr) {
    (*ptr)++; // 增加指针指向的值
}

// 计算数组元素之和
int sum(int arr[], int size) {
    int total = 0;
    for (int i = 0; i < size; i++) {
        total += arr[i];
    }
    return total; // 返回数组元素之和
}

int main() {
    // 调用无参无返回值函数
    greet();

    // 调用有参无返回值函数(值传递)
    int a = 10, b = 20;
    printf("Before swap: a = %d, b = %d\n", a, b);
    swap(a, b);
    printf("After swap: a = %d, b = %d\n", a, b);

    // 调用无参有返回值函数
    int squareResult = square();
    printf("Square of 5 is %d\n", squareResult);

    // 调用有参有返回值函数(值传递)
    int sumResult = add(a, b);
    printf("Sum of %d and %d is %d\n", a, b, sumResult);

    // 调用有参有返回值函数(地址传递)
    int value = 5;
    printf("Before increment: value = %d\n", value);
    increment(&value);
    printf("After increment: value = %d\n", value);

    // 计算数组元素之和
    int numbers[] = {1, 2, 3, 4, 5};
    int sumResultArray = sum(numbers, 5);
    printf("Sum of array elements is %d\n", sumResultArray);

    return 0;
}

以上代码展示了函数的定义和调用,包括无参无返回值函数、有参无返回值函数(值传递)、无参有返回值函数、有参有返回值函数(值传递和地址传递)。这些示例可以帮助理解函数的工作原理和实际应用。在实际编程中,可以根据具体需求定义和调用函数,以实现代码的模块化和重用。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)