[英]C function pointer and typedef
我得到了密码。 我需要使用以下函数,但是在调用它时遇到了问题。
int myFunction(const struct LQuery *pQuery,
f_Callback Callback,
const void *pPriv);
我有以下定义
typedef void (f_Callback) (int NumOfRecordsFound,
void *pPriv,
const tL_QueryResult *pData);
我知道Callback
应该是指向my_callbackFunction
的指针,但是我似乎不明白如何为它设置参数。 据我了解pQuery
传递给回调函数,但f_Callback
需要3个参数。
即
int main (int Argc, char *pArgv[])
{
myFunction(what should go here and WHY)
}
回调函数将从myFunction
调用。 您只需要传递回调函数作为参数即可。 这是一个例子:
#include <stdio.h>
typedef void (f_Callback)(int a,
int b,
int c);
int myFunction(int a, f_Callback* callback)
{
callback(a, a+1, a+2);
}
void myCallback(int a, int b, int c)
{
printf("a: %d, b: %d, c: %d\n", a, b, c);
}
int main()
{
myFunction(5, &myCallback);
return 0;
}
预期产量:
$./a.out
a: 5, b: 6, c: 7
typedef不正确。 它应该是
typedef void (*f_Callback) (
int NumOfRecordsFound,
f_Callback Callback,
const void *pPriv);
这是正确的功能指针-注意星号; 否则,它将为函数原型声明一个typedef,尽管它可以在函数声明中使用,但您不能将其本身用作变量。
如果您有类似的功能
int myFunction(const struct LQuery *pQuery,
f_Callback Callback,
const void *pPriv);
还有一个回调
void my_callback_function(int records_found,
f_Callback callback,
const void *priv)
{
...
}
您可以简单地调用myfunction
myFunction(the_query, my_callback_function, the_private_pointer);
左值my_callback_function
将衰减为函数指针,因此不需要&
字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.