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;
}

相关推荐

  1. C语言10 函数

    2024-07-11 03:04:05       21 阅读
  2. c语言函数7.18

    2024-07-11 03:04:05       24 阅读
  3. C语言K&R圣经笔记 5.11函数指针

    2024-07-11 03:04:05       50 阅读
  4. C语言自学笔记19----结构体函数

    2024-07-11 03:04:05       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 03:04:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 03:04:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 03:04:05       57 阅读
  4. Python语言-面向对象

    2024-07-11 03:04:05       68 阅读

热门阅读

  1. 在Qt中使用C++编程与传统C++编程的区别

    2024-07-11 03:04:05       17 阅读
  2. 【Android】【多屏】多屏异显异触调试技巧总结

    2024-07-11 03:04:05       23 阅读
  3. pjsip环境搭建、编译源码生成.lib库

    2024-07-11 03:04:05       23 阅读
  4. 【牛客网】华为2016研发工程师编程题

    2024-07-11 03:04:05       19 阅读
  5. 【Perl CGI脚本全解析】打造动态Web应用的秘籍

    2024-07-11 03:04:05       22 阅读
  6. Leetcode 59. 螺旋打印矩阵

    2024-07-11 03:04:05       23 阅读
  7. MySQL 日期和时间函数

    2024-07-11 03:04:05       18 阅读
  8. Leetcode234.判断是否是回文单链表

    2024-07-11 03:04:05       19 阅读