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函数用于任何需要一个包含随机数的数组的场景中,而不用去修改该函数。
