如何在C语言中传递一个带两个参数的函数作为参数?
问题分析与修正
你的代码存在两处语法错误,导致函数指针无法正确传递和调用:
1. func2的参数声明错误
你已经通过typedef定义了函数指针类型visitFunc,因此在func2的参数列表中,直接使用visitFunc func即可,无需重复写参数列表(int n1, int n2),重复声明会引发语法冲突。
2. printf格式字符串错误
原代码中printf("%d", z);的换行写法错误,正确的换行符应为\n,格式字符串需改为"%d\n"。另外注意要包含头文件stdio.h才能使用printf。
修正后的完整代码
#include <stdio.h> typedef int (*visitFunc) (int n1, int n2); int func1(int num1, int num2) { return num1 + num2; } // 修正函数参数声明 int func2(int num1, int num2, visitFunc func) { return func(num1, num2); } int main() { int x = 2; int y = 5; int z = func2(x, y, func1); printf("%d\n", z); // 修正格式字符串 return 0; }
关键说明
typedef int (*visitFunc)(int n1, int n2):定义了一种指针类型,专门指向“接收两个int参数、返回int值”的函数。- 传递函数指针时,直接写函数名
func1即可,函数名本身就是指向该函数的指针。 func2通过visitFunc类型的参数接收函数指针,直接调用func(num1, num2)就能执行传入的目标函数。
内容的提问来源于stack exchange,提问作者Casta
相关产品推荐
相关产品推荐

