C语言10 函数

 

目录

函数定义

示例

函数声明

函数传递参数

按值传递

按引用传递

函数传递数组参数

示例

递归函数

示例:计算阶乘

局部和全局变量

局部变量

全局变量

静态变量

内联函数

可变参数函数

示例

函数指针

示例

回调函数

示例


函数是C语言中用于执行特定任务的一段代码。函数的基本定义包括返回类型、函数名、参数列表和函数体。

函数定义
返回类型 函数名(参数类型 参数名, ...) {
    // 函数体
    return 返回值; // 可选
}
示例
int add(int a, int b) {
    return a + b;
}
函数声明

函数声明通常放在文件的开头或者头文件中,用于告诉编译器函数的存在。

int add(int a, int b);

函数传递参数

函数可以通过参数列表传递参数。参数传递有按值传递和按引用传递(通过指针)。

按值传递

按值传递时,函数接收的是参数的副本,原变量不会被修改。

void modifyValue(int x) {
    x = 10;
}

int main() {
    int a = 5;
    modifyValue(a);
    printf("%d\n", a); // 输出5,a未被修改
    return 0;
}
按引用传递

通过指针传递参数,可以修改原变量的值。

void modifyValue(int *x) {
    *x = 10;
}

int main() {
    int a = 5;
    modifyValue(&a);
    printf("%d\n", a); // 输出10,a被修改
    return 0;
}

函数传递数组参数

数组作为参数传递时,实际上是传递了数组的指针,可以在函数中修改数组的内容。

示例
void modifyArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] = i * 2;
    }
}

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    modifyArray(array, 5);
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]); // 输出0 2 4 6 8
    }
    return 0;
}

递归函数

递归函数是指在其定义中调用自身的函数。递归需要有一个终止条件,否则会导致无限递归。

示例:计算阶乘
int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int result = factorial(5);
    printf("%d\n", result); // 输出120
    return 0;
}

局部和全局变量

局部变量

局部变量在函数内部声明,只在函数内部可见和有效。

void func() {
    int local = 10; // 局部变量
}
全局变量

全局变量在所有函数外部声明,在整个程序中可见和有效。

int global = 10; // 全局变量

void func() {
    global = 20;
}

静态变量

静态变量在函数内部声明,但其值在函数调用间保持。

void func() {
    static int count = 0; // 静态变量
    count++;
    printf("%d\n", count);
}

int main() {
    func(); // 输出1
    func(); // 输出2
    return 0;
}

内联函数

内联函数使用inline关键字声明,提示编译器将函数体嵌入到每个调用点,以减少函数调用的开销。

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

可变参数函数

可变参数函数使用stdarg.h头文件提供的宏来处理不定数量的参数。

示例
#include <stdarg.h>
#include <stdio.h>

void printNumbers(int count, ...) {
    va_list args;
    va_start(args, count);
    for (int i = 0; i < count; i++) {
        printf("%d ", va_arg(args, int));
    }
    va_end(args);
    printf("\n");
}

int main() {
    printNumbers(3, 1, 2, 3); // 输出1 2 3
    return 0;
}

函数指针

函数指针是指向函数的指针,可以用于实现回调函数和动态函数调用。

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

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

int main() {
    int (*operation)(int, int);

    operation = add;
    printf("Add: %d\n", operation(5, 3)); // 输出8

    operation = subtract;
    printf("Subtract: %d\n", operation(5, 3)); // 输出2

    return 0;
}

回调函数

回调函数是一种通过函数指针调用的函数,常用于事件驱动编程和异步编程。

示例
#include <stdio.h>

void processArray(int *arr, int size, void (*process)(int *)) {
    for (int i = 0; i < size; i++) {
        process(&arr[i]);
    }
}

void increment(int *num) {
    (*num)++;
}

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    processArray(array, 5, increment);
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]); // 输出2 3 4 5 6
    }
    return 0;
}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值