You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 09:12:12