Logo
Section 1 / 4

示例 98:函数指针

学习如何创建函数指针数组并使用它们调用函数。

导入

示例 98:函数指针

学习如何创建函数指针数组并使用它们调用函数。

问题

创建一个包含四个函数指针的数组。每个指针应指向不同的函数。这些函数中的每一个都应接收两个整数并返回一个 float 变量。使用循环,通过数组中存储的地址调用这些函数中的每一个。

自行尝试

请在下面的代码编辑器中自行尝试解决此问题。如果遇到困难,可以随时参考提供的解决方案。

1#include <stdio.h> 2// 创建四个函数 3int main() { 4 // 在此处编写你的代码 5 // 创建一个包含四个函数指针的数组 6 // 调用上述创建的函数 7}

解答

以下是推荐的解题思路。

1/* 创建并使用函数指针数组 */ 2#include <stdio.h> 3 4float fun1 (int i, int j) { 5 printf ("In fun1 i = %d j = %d\n", i, j); 6 return (float)(i + j); 7} 8 9float fun2 (int i, int j) { 10 printf ("In fun2 i = %d j = %d\n", i, j); 11 return (float)(i - j); 12} 13 14float fun3 (int i, int j) { 15 printf ("In fun3 i = %d j = %d\n", i, j); 16 return (float)(i * j); 17} 18 19float fun4 (int i, int j) { 20 printf ("In fun4 i = %d j = %d\n", i, j); 21 return (float)(i / j); 22} 23 24int main(){ 25 float (*ptr[ 4 ]) (int, int); 26 float f; 27 int i; 28 29 ptr [ 0 ] = fun1; 30 ptr [ 1 ] = fun2; 31 ptr [ 2 ] = fun3; 32 ptr [ 3 ] = fun4; 33 34 for (i = 0 ; i <= 3 ; i++){ 35 f = (*ptr [ i ]) (100, i + 1); 36 printf ("%f\n", f); 37 } 38 39 return 0; 40}

解释

函数 fun1()、fun2()、fun3() 和 fun4() 都接收两个整数类型的变量,对它们执行一些算术运算,并返回 float 类型的结果。这些函数的地址被存储在函数指针数组 ptr[] 中。请注意该数组的定义。

随后,在 for 循环中,使用以下表达式调用数组中第 i 个位置所指向的函数:

1f = ( *ptr [ i ] ) ( 100, i + 1 );

每次调用时,将 100 和当前 i 的值传递给函数,其返回的结果被存入 f 并打印输出。

位运算符

示例 99:具有可变数量参数的函数