将数组传递给 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*
并取消引用它。
恕我直言,直接传递数组是最好的方法,因为当你不想修改指向的指针时,不需要将指针传递给指针,这似乎是你的情况
具有此原型的回调函数:
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*
并取消引用它。
恕我直言,直接传递数组是最好的方法,因为当你不想修改指向的指针时,不需要将指针传递给指针,这似乎是你的情况