将数组传递给 void 参数中的回调函数

Passing array to callback function in void parameter

具有此原型的回调函数:

void serverAnswer(void *pUserData, int flag);

我需要使用 void 参数将缓冲区 const uint8_t *buf 传递给此函数。 如何传递缓冲区,如何在函数中访问缓冲区的元素?

示例(无效):

致电:

const uint8_t *buf;
int buf_len = 3;
serverAnswer(&buf, buf_len);

访问缓冲区:

void serverAnswer(void *pUserData, int flag) {

uint8_t* p = (uint8_t *)pUserData;
uint8_t data = p[0];

}

&buf 是一个 const uint8_t **。你真正想要做的是将 buf 传递给 serverAnswer,你需要一个 const_cast 来允许从 const 指针到 void* 的转换:

const uint8_t* buf;
serverAnswer(const_cast<uint8_t*>(buf), buf_len);

为避免未定义的行为,您应该将 const 放回 serverAnswer:

void serverAnswer(void *pUserData, int flag) {

const uint8_t* p = (const uint8_t *)pUserData;
uint8_t data = p[0];

}

您实际上是在调用期间传递指向数组的指针。在您的代码中,您要转换回 uint8_t* 的是 uint8_t**.

您需要做的是直接传递数组,或者将其转换为 uint8_t** 而不是 uint8_t* 并取消引用它。

恕我直言,直接传递数组是最好的方法,因为当你不想修改指向的指针时,不需要将指针传递给指针,这似乎是你的情况