我想使用回调函数B将变量'c'从main传递给(任意)函数A.如上所示,我可以将变量'b'传递给函数b中的函数A,但我找不到从main传递的语法。
#include<stdio.h>
void A(int a)
{
printf("I am in function A and here's a: %d\n", a);
}
// callback function
void B(void (*ptr)(int b) )
{
// int b = 5;
int b;
printf("I am in function B and b = %d\n", b);
(*ptr) (b); // callback to A
}
int main()
{
int c = 6;
void (*ptr)(int c) = &A;
// calling function B and passing
// address of the function A as argument
B(ptr);
return 0;
}
是否存在使用回调将变量从main传递到任意函数的语法?
答案 0 :(得分:2)
您可能会感到困惑的是函数声明中参数的名称。他们没有必要,放弃它们会更好。
这两行是相同的:
void (*ptr)(int c) = &A;
void (*ptr)(int) = &A;
该表达式中的c
与变量c
无关。此外,您可以使用:
typedef void (*callback_t)(int);
并使用以下内容进行声明。
callback_t ptr = &A;
然后更明显的是,B
需要两个参数。
void B(callback_t ptr, int param) {
ptr(param);
}
int main() {
...
B(ptr, c);
}
答案 1 :(得分:1)
使用(*ptr) (b)
调用函数指针是可以的,但我更喜欢调用它
ptr(b)
,对我来说更具可读性。这只是我的偏好。
如果要将变量传递给main
的回调,请将B
更改为
接受回调值并在调用回调时使用该变量
使用函数指针,如下所示:
void B(void (*ptr)(int b), int var_for_callback)
{
printf("I am in function B and var_for_callback is %d\n", var_for_callback);
ptr(var_for_callback);
}
int main()
{
int c = 6;
void (*ptr)(int c) = &A;
// calling function B and passing
// address of the function A as argument
B(ptr, c);
return 0;
}
现在您将c
的值传递给B
并将B
传递给通过的回调
在ptr
。