указатели кастинга в C ++ - PullRequest
4 голосов
/ 14 ноября 2011

У меня есть последовательный порт, возвращающий uint8 следующим образом

uint8 bucket[255];
res = COM.com_read((char *)&bucket);

как я могу передать указатель ведро в указатель buff в приведенной ниже функции:

ssize_t send(int s, const void *buf, size_t len, int flags);

Ответы [ 3 ]

4 голосов
/ 14 ноября 2011

& не требуется в com_read, и вы должны написать это:

//after removing '&'
//bucket being an array converts to pointer automatically
res = COM.com_read((char *)bucket);  //Dont use &

Или даже лучший результат будет static_cast:

res = COM.com_read(static_cast<char*>(bucket)); //C++ Style cast!

И при отправке bucket на send вам не нужно разыгрывать.Это неявно выполняется компилятором, поскольку целевой тип void*, и любой указатель может неявно преобразовываться в void*.

2 голосов
/ 14 ноября 2011

Приведение не требуется, оно выполняется неявно (любой указатель может быть приведен к const void* неявно).

Обратите внимание, что при явном приведении предпочтительнее использовать операторы C ++:

res = COM.com_read(static_cast<char *>(bucket));
1 голос
/ 14 ноября 2011

Static_cast добьется цели и из void *, но вы уверены, что вам нужен явный приведение? Я думаю, что это должно быть сделано неявно для вас

static_cast<void *>(bucket)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...