欢迎访问宙启技术站
智能推送

C语言函数调用的三种实现方法实例

发布时间:2023-05-18 20:42:17

C语言是一种结构化编程语言,函数是C语言中最基本的构建模块,多个函数可以组成一个程序。在C语言中,函数的调用可以采用三种不同的实现方法:

1.普通调用

普通调用是最基本的函数调用方式。在该调用方式中,函数由调用者直接调用,当函数执行完毕后,返回结果给调用者。

示例程序:

#include <stdio.h>

int max(int num1, int num2) {
   return (num1 > num2 ) ? num1 : num2;
}

int main () {
   int a = 100;
   int b = 200;
   int ret;

   // 调用函数来获取最大值
   ret = max(a, b);

   printf( "Max value is : %d
", ret );

   return 0;
}

在以上示例程序中,主函数直接调用max函数来获取两个数的最大值。

2.递归调用

递归调用是一种函数调用自己的方式,这种方式比较常见,特别是在处理递归数据结构时。

示例程序:

#include <stdio.h>

unsigned long long factorial(unsigned int i) {
   if (i <= 1) {
      return 1;
   }
   return i * factorial(i - 1);
}

int main () {
   int i = 10;
   printf("%d 的阶乘是 %llu
", i, factorial(i));
   return 0;
}

上述示例程序中,factorial函数使用递归方式实现了计算阶乘的功能。在该程序中,factorial函数首先检查传入参数是否小于等于1,如果是,返回1。否则,继续递归调用函数来计算阶乘。

3.回调函数

回调函数是一种将函数作为参数传递给另一个函数的方式,这种方式可以让我们编写更加通用的函数。

示例程序:

#include <stdio.h>

void populate_array(int *array, size_t arraySize, int (*getNextValue)(void)) {
   for (size_t i = 0; i < arraySize; i++) {
      array[i] = getNextValue();
   }
}

int getNextRandomValue(void) {
   return rand();
}

int main(void) {
   int myarray[10];
   populate_array(myarray, 10, getNextRandomValue);
   for(int i = 0; i < 10; i++) {
      printf("%d ", myarray[i]);
   }
   printf("
");
   return 0;
}

在以上示例程序中,populate_array函数接收一个整型数组、数组大小和一个函数指针getNextValue作为参数。getNextValue函数实际上是一个回调函数,它返回一个随机数。

populate_array函数在循环中调用getNextValue函数并把返回值存储到了数组中。因此,我们可以将populate_array函数用于任何需要一个包含随机数的数组的场景中,而不用去修改该函数。