Wil*_*iam 0 c++ pointers casting void-pointers
是否可以交换两个void指针的内容?我尝试通过解除引用两个指针来交换值:
void* a = (void*)50;
void* b = (void*)90;
*a = *b;
Run Code Online (Sandbox Code Playgroud)
但是,最后一行会抛出错误,因为无法取消引用void指针.
我认为可以通过首先将b的值转换为int然后将其强制转换为void*来实现:
void* a = (void*)50;
void* b = (void*)90;
int value = (int)b;
a = (void*)value; //a now equals b
Run Code Online (Sandbox Code Playgroud)
不幸的是,这需要我们知道a和b是什么类型的"假设"(我不知道这样的描述是否正确),在这种情况下,它们是整数.是否可以在不知道其"原始"类型的情况下交换两个void指针的内容?
谢谢.
不,那是不可能的.为了做这样的事情,关于两个指针所指向的对象的大小的信息必须在运行时某处出现,但事实并非如此.此外,有些类型不是简单的可复制的,因此,交换它们的字节可能不会交换它们的值,并且可能导致未定义的行为.