• 逍遥自在学C语言 | 函数初级到高级解析


    前言

    函数是C语言中的基本构建块之一,它允许我们将代码组织成可重用、模块化的单元。

    本文将逐步介绍C语言函数的基础概念、参数传递、返回值、递归以及内联函数和匿名函数。

    一、人物简介

    • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

    • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

    二、基础概念

    • 函数是一个独立的代码块,可以接收输入参数并执行特定任务。

    • 它可以用于执行特定的操作或计算,并可以返回一个值(可选)。

    • 以下是一个简单的示例:

    #include 
    
    // 声明函数
    int addNumbers(int a, int b) {
      int sum = a + b;
      return sum;
    }
    
    int main() {
      // 调用函数
      int result = addNumbers(3, 4);
      printf("两数之和:%d\n", result);
    
      return 0;
    }
    
    
    • 上述代码中,我们声明了一个名为addNumbers的函数,它接收两个整数参数并返回它们的和。

    • main函数中,我们调用了addNumbers函数,并将结果打印到控制台上。

    • 运行结果

    两数之和:7
    

    三、参数传递

    • 函数可以通过参数接收外部传入的数据。
    • 在C语言中,有两种参数传递的方式:按值传递和按引用传递。
    • 代码示例
    #include 
    
    // 按值传递
    void incrementByValue(int num) {
      num += 1;
    }
    
    // 按引用传递
    void incrementByReference(int* numPtr) {
      (*numPtr) += 1;
    }
    
    int main() {
      int num = 5;
    
      incrementByValue(num);
      printf("按值传递后的值:%d\n", num);
    
      incrementByReference(&num);
      printf("按引用传递后的值:%d\n", num);
    
      return 0;
    }
    
    
    • 在上面的示例中,我们定义了两个函数incrementByValueincrementByReference

    • incrementByValue按值传递参数,即在函数内部对参数的修改不会影响到原始变量。

    • incrementByReference按引用传递参数,通过传递指针的方式,可以在函数内部修改原始变量的值。

    • 运行结果

    按值传递后的值:5
    按引用传递后的值:6
    

    四、返回值

    函数可以返回一个值,这使得我们可以从函数中获取计算结果或执行状态。

    #include 
    
    // 返回两个数中较大的数
    int max(int a, int b) {
      if (a > b) {
        return a;
      } else {
        return b;
      }
    }
    
    int main() {
      int a = 3;
      int b = 4;
    
      int maxValue = max(a, b);
      printf("较大的数:%d\n", maxValue);
    
      return 0;
    }
    
    
    • 在上述示例中,max函数接收两个整数参数并返回较大的数。

    • main函数中,我们调用max函数,并将结果打印到控制台上。

    • 运行结果

    较大的数:4
    

    五、递归函数

    • 递归是一种函数调用自身的技术。

    • 它在解决一些问题时非常有用,如计算阶乘、斐波那契数列等。

    • 代码示例

    #include 
    
    // 计算阶乘
    int factorial(int n) {
      if (n == 0 || n == 1) {
        return 1;
      } else {
        return n * factorial(n - 1);
      }
    }
    
    int main() {
      int num = 5;
      int result = factorial(num);
      printf("%d的阶乘:%d\n", num, result);
    
      return 0;
    }
    
    
    • 在上面的示例中,factorial函数使用递归的方式计算一个数的阶乘。

    • main函数中,我们调用factorial函数,并将结果打印到控制台上。

    • 运行结果

    5的阶乘:120
    

    六、内联函数

    • 内联函数是一种函数调用的优化方式,编译器会将函数的代码直接嵌入到调用该函数的地方,而不是通过函数调用的方式进行执行。

    • 内联函数的好处是可以减少函数调用的开销,提高程序的执行效率。

    • 使用内联函数可以通过在函数定义前加上关键字inline来标识。

    • 代码示例

    #include 
    
    // 内联函数
    inline int square(int num) {
      return num * num;
    }
    
    int main() {
      int result = square(5);
      printf("平方:%d\n", result);
    
      return 0;
    }
    
    
    • 在上述示例中,我们定义了一个内联函数square,它计算一个数的平方。

    • main函数中,我们调用square函数,并将结果打印到控制台上。

    • 运行结果

    平方:25
    

    七、匿名函数

    • C语言本身不直接支持匿名函数,但可以使用函数指针和函数指针结构体来模拟匿名函数的功能。
    • 代码示例
    #include 
    
    // 匿名函数模拟
    typedef int (*Operation)(int, int);
    
    int performOperation(int a, int b, Operation op) {
      return op(a, b);
    }
    
    int main() {
      Operation add = [](int a, int b) {
        return a + b;
      };
    
      int result = performOperation(3, 4, add);
      printf("结果:%d\n", result);
    
      return 0;
    }
    
    
    • 在上述示例中,我们使用函数指针结构体Operation来模拟匿名函数。

    • 我们定义了一个匿名函数add,它实现了两个数的加法运算。然后,我们将add函数作为参数传递给performOperation函数,并打印结果到控制台上。

    • 运行结果

    结果:7
    

    小结

    通过这篇文章,我们学会了

    1、函数的概念,参数传递,函数返回值

    2、递归函数

    3、内联函数

    4、匿名函数

    📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!

  • 相关阅读:
    MySQL索引和优化
    DeepStream系列之命令行pipeline帧率检测
    化工制造行业数字化升级案例—基于HK-Domo商业智能分析工具
    【深度学习】——深度学习中基本的网络结构(2)
    vue3父子props 非props emit slot 具名/动态/作用域slot 动态/异步组件suspense $refs 生命周期
    海外拼多多Temu最新动态,怎么快速提升销量和权重?(测评补单)
    python 文件加密
    spark相关网站
    uni-app项目中画布实现海报
    工作十多年后反思自己为什么没有成为牛逼程序员
  • 原文地址:https://www.cnblogs.com/Wayne123/p/17512852.html