C语言函数foo签名中首个参数的含义解析及示例请求
函数
foo第一个参数的含义解释 函数foo的第一个参数x是一个函数指针,它指向的函数必须满足:接受两个void*类型的参数,且返回值为void(无返回值)。简单来说,你可以把任何符合这个签名的函数的地址传给x,foo内部就能通过这个指针调用你传入的函数,实现逻辑的灵活复用。
具体示例说明
下面用C语言代码演示如何使用这个参数:
#include <stdio.h> // 示例1:打印两个void*指向的整数 void printPair(void* val1, void* val2) { int* num1 = (int*)val1; int* num2 = (int*)val2; printf("数值1:%d,数值2:%d\n", *num1, *num2); } // 示例2:将两个整数相加,结果存在第一个参数指向的地址 void sumPair(void* val1, void* val2) { int* num1 = (int*)val1; int* num2 = (int*)val2; *num1 += *num2; printf("相加结果:%d\n", *num1); } // 题目中要求定义的foo函数 int foo(void(*x)(void*, void*), void *arg1, void *arg2, void *stack) { // 通过函数指针x调用传入的自定义函数,传入arg1和arg2作为参数 x(arg1, arg2); // 这里可以根据业务逻辑返回状态码,比如0表示执行成功 return 0; } int main() { int a = 15, b = 25; // 调用foo,传入printPair的地址,打印a和b foo(printPair, &a, &b, NULL); // 调用foo,传入sumPair的地址,计算a+b foo(sumPair, &a, &b, NULL); return 0; }
运行这段代码会输出:
数值1:15,数值2:25 相加结果:40
设计意图
这种通过函数指针传递逻辑的方式,是回调函数的典型用法。foo可以作为一个通用的框架函数,不需要关心具体的业务逻辑(比如打印、求和),只负责调用传入的函数;而具体的逻辑由外部传入的函数实现,这样能极大提升代码的灵活性和复用性。
内容的提问来源于stack exchange,提问作者Gengar
相关产品推荐
相关产品推荐

