gpt4 book ai didi

c - 如何将结构作为参数传递给回调函数

转载 作者:行者123 更新时间:2023-11-30 17:01:10 25 4
gpt4 key购买 nike

我正在学习 C 并尝试将结构传递给回调函数。浏览了在线资源但无法传递结构来回调函数。这是我的代码。

// myvariables.h

struct callbackStruct
{
int a;
int b;
int c;
};
extern struct callbackStruct callbackStructObject;
typedef void (*callback)(struct callbackStruct);
extern void callback_reg(callback pointerRefCallback);

// Operations.c

struct callbackStruct callbackStructObject;

void callback_reg(callback pointerRefCallback) {

(*pointerRefCallback)(callbackStructObject);

}

// main.c

struct callbackStruct myCallbackStruct1;
void my_callback(struct callbackStruct myCallbackStruct) {

printf("A value:%d" + myCallbackStruct.a);

}

int main()
{
callback ptr_my_callback = my_callback(myCallbackStruct1);
callback_reg(ptr_my_callback);
return 0;
}

谁能解决这个问题吗?

最佳答案

类型callback是函数指针类型,例如该类型的变量是一个指针,它指向一个接受structcallbackStruct作为单个参数的函数:

typedef void (*callback)(struct callbackStruct);

所以当你写(在main中)时:

// ...
callback ptr_my_callback = // HERE
// ...

HERE处的表达式必须是具有正确签名的函数的地址。你写:

my_callback(myCallbackStruct1);

由于 my_callback 是一个不返回任何内容的函数 (void),并且上述表达式调用此函数,因此表达式

  callback ptr_my_callback = my_callback(yCallbackStruct1);

格式不正确(从语法上以及从类型系统的角度来看)。

假设my_callback是您想要用作回调的函数,您需要将其地址存储在指针ptr_my_callback中:

  callback ptr_my_callback = &my_callback;

不过,目前还不清楚您的代码应该实现什么目标,因此我无法真正为您提供进一步的帮助。

关于c - 如何将结构作为参数传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com