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

如何在C语言中通过回调向函数指针指向的函数传递整数参数

C语言回调函数实现错误修复

原代码存在的问题

  • 格式符使用错误:printf中打印整数应该用%d格式符,原代码误用了字符串格式符%s,会导致运行时异常。
  • 函数指针形参不匹配:函数B接收的函数指针定义为无入参类型void (*ptr)(),和目标函数A的void(int)类型不匹配,调用时无法传递整数参数。
  • 函数指针初始化语法错误:void (*p)(int) = A(int);是非法语法,函数名本身就是函数地址,直接赋值即可,不需要加参数标识。
  • 回调调用逻辑错误:B(p(3))是先执行p(3)再将返回值传入B,而B需要接收的是函数指针本身,同时缺少传递给回调的整数参数入口。

修复后可运行代码

//FUnction Pointers in C/C++
#include<stdio.h>
void A(int ree)
{
    printf("Hello %d\n", ree);
}
// 调整B的形参:指定函数指针入参类型,新增参数存储要传递给回调的整数
void B(void (*ptr)(int), int target_num)
{
    ptr(target_num);
}
int main()
{
    void (*p)(int) = A;
    B(p, 3);
    return 0;
}

运行说明

修复后代码执行逻辑:main函数中初始化指向函数A的指针p,将p和要打印的整数3共同传入函数B,B内部调用回调函数时把3作为入参传递给A,最终输出预期结果Hello 3。

内容的提问来源于stack exchange,提问作者Ant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:10