C++交换两个空隙的内容*

C++交换两个空隙的内容*,c++,pointers,casting,void-pointers,C++,Pointers,Casting,Void Pointers,是否可以交换两个空指针的内容?我尝试通过取消引用两个指针来交换值: void* a = (void*)50; void* b = (void*)90; *a = *b; 但是,最后一行抛出一个错误,因为不可能取消对空指针的引用 我认为可以通过先将b的值转换为int,然后再将其转换回void*来实现,如下所示: void* a = (void*)50; void* b = (void*)90; int value = (int)b; a = (void*)value; //a now equa

是否可以交换两个空指针的内容?我尝试通过取消引用两个指针来交换值:

void* a = (void*)50;
void* b = (void*)90;
*a = *b;
但是,最后一行抛出一个错误,因为不可能取消对空指针的引用

我认为可以通过先将b的值转换为int,然后再将其转换回void*来实现,如下所示:

void* a = (void*)50;
void* b = (void*)90;

int value = (int)b;
a = (void*)value; //a now equals b
不幸的是,这需要我们知道a型和b型应该是什么类型,我不知道这样的描述是否正确,在这种情况下,它们是INT。是否可以在不知道其原始类型的情况下交换两个void指针的内容


谢谢。

不,那是不可能的。为了做到这一点,两个指针指向的对象的大小信息必须在运行时的某个地方出现,但事实并非如此。此外,还有一些类型是不可复制的,因此,交换它们的字节可能不会交换它们的值,并且可能导致未定义的行为

是否可以在不知道其原始类型的情况下交换两个void指针的内容


如果您不了解这些类型,那么不,这是不可能的。至少,您必须知道类型的大小。这仅适用于类型。

std::swapa,b有什么问题?应该避免使用无效指针。你为什么要使用它们?你是在谈论交换指针还是交换它们指向的对象?交换它们指向的数据/对象/字节以观察你在这里所做的事情:void*a=void*50;这将a声明为指向void的指针,并将其指向内存地址50。它不在a指向的地址存储50,它指向地址50的数据,而50几乎肯定不是一个有效的地址。通常,前几千个地址是verboten,从未使用过,因为它使捕获意外的空指针访问更容易*a=*b;然后将坏内存地址的数据分配给另一个坏内存地址的数据,然后