在void参数中将数组传递给回调函数 [英] Passing array to callback function in void parameter

查看:34
本文介绍了在void参数中将数组传递给回调函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

具有此原型的回调函数:

A have callback function with this prototype:

void serverAnswer(void *pUserData, int flag);

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

I need to pass a buffer const uint8_t *buf to this function using the void parameter. How do i pass the buffer, and how can i access the elements of the buffer in the function?

示例(不起作用):

调用:

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* 的指针:

&buf is a const uint8_t **. What you actually want to do is pass buf to serverAnswer, you'll need a const_cast to allow conversion from a const pointer to void*:

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

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

To avoid undefined behaviour you should put the const back in serverAnswer:

void serverAnswer(void *pUserData, int flag) {

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

}

这篇关于在void参数中将数组传递给回调函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆