从'void*'到'unsigned char*'的转换无效

jwb*_*ley 6 c++ void-pointers unsigned-char

我有以下代码;

void* buffer = operator new(100);
unsigned char* etherhead = buffer;
Run Code Online (Sandbox Code Playgroud)

我在尝试编译时遇到以下错误;

error: invalid conversion from ‘void*’ to ‘unsigned char*’
Run Code Online (Sandbox Code Playgroud)

为什么我会得到那个错误,我认为一个空白是"无类型"所以它可以指向任何东西,或任何东西可以指向它?

jos*_*mas 9

你需要进行强制转换,因为你无法将void*转换为任何东西而不先抛出它.

你需要这样做

unsigned char* etherhead = (unsigned char*)buffer;
Run Code Online (Sandbox Code Playgroud)

(虽然你也可以使用static_cast)

要了解有关void指针的更多信息,请查看6.13 - Void指针.


CB *_*ley 5

A void*可能指向任何东西,你可以将指针转换为其他任何东西,void*而不是强制转换,但你必须使用a static_cast来做反向.

unsigned char* etherhead = static_cast<unsigned char*>(buffer);
Run Code Online (Sandbox Code Playgroud)

如果你想要一个100的动态分配缓冲区,unsigned char你最好这样做并避免强制转换.

unsigned char* p = new unsigned char[100];
Run Code Online (Sandbox Code Playgroud)