如何在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
相关产品推荐
相关产品推荐

