使用回调函数指针传递变量

时间:2018-02-19 02:18:29

标签: c function pointers call back

我想使用回调函数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传递到任意函数的语法?

2 个答案:

答案 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