如何为C语言复杂声明int (*f(float (*)(long),char *))(double)编写示例?
拆解复杂C语言声明并编写使用示例
先给你拆解下这个看起来有点绕的声明 int (*f(float (*)(long),char *))(double) 的结构(用「由内到外」的读法):
f是一个函数f的参数有两个:- 第一个参数是一个指针,指向「接收
long类型参数、返回float类型的函数」 - 第二个参数是
char*类型的指针
- 第一个参数是一个指针,指向「接收
f的返回值是一个指针,指向「接收double类型参数、返回int类型的函数」
接下来直接上完整的使用示例代码,每一步都给你标清楚对应关系:
#include <stdio.h> // 第一步:定义第一个参数对应的函数类型(接收long,返回float) float num_calculator(long input_num) { return (float)input_num * 0.5f; } // 第二步:定义f返回值对应的函数类型(接收double,返回int) int result_processor(double input_val) { return (int)(input_val + 100); } // 第三步:实现函数f,完全对应你的声明 int (*f(float (*calc_func)(long), char *desc))(double) { // 用传入的参数做些演示操作 printf("收到描述信息:%s\n", desc); float temp_result = calc_func(200L); printf("传入函数的计算结果:%.2f\n", temp_result); // 返回我们定义的result_processor函数地址 return result_processor; } int main() { // 调用f函数,传入指定函数的地址和描述字符串 int (*processor)(double) = f(num_calculator, "这是一次测试计算"); // 使用f返回的函数指针调用目标函数 int final_result = processor(30.8); printf("最终处理结果:%d\n", final_result); return 0; }
代码运行输出:
收到描述信息:这是一次测试计算 传入函数的计算结果:100.00 最终处理结果:130
如果觉得原生函数指针声明太晦涩,也可以用typedef来简化,让代码可读性大幅提升:
// 用typedef包装第一个参数的函数指针类型 typedef float (*CalcFuncPtr)(long); // 用typedef包装返回值的函数指针类型 typedef int (*ProcessorFuncPtr)(double); // 简化后的f函数声明,逻辑完全一致 ProcessorFuncPtr f(CalcFuncPtr calc_func, char *desc) { printf("收到描述信息:%s\n", desc); float temp_result = calc_func(200L); printf("传入函数的计算结果:%.2f\n", temp_result); return result_processor; }
这样是不是清晰多了?复杂的函数指针用typedef包装后,后续维护和扩展都会方便很多。
内容的提问来源于stack exchange,提问作者wanggaoteng
相关产品推荐
相关产品推荐

