【发布时间】:2016-10-24 21:04:13
【问题描述】:
是否可以交换两个 void 指针的内容?我尝试通过取消引用两个指针来交换值:
void* a = (void*)50;
void* b = (void*)90;
*a = *b;
但是,最后一行会引发错误,因为无法取消引用 void 指针。
我认为可以通过首先将 b 的值转换为 int 然后将其转换回 void* 来实现,如下所示:
void* a = (void*)50;
void* b = (void*)90;
int value = (int)b;
a = (void*)value; //a now equals b
不幸的是,这需要我们知道 a 和 b “应该”是什么类型(我不知道这样的描述是否正确),在这种情况下,它们是整数。是否可以在不知道它们的“原始”类型的情况下交换两个 void 指针的内容?
谢谢。
【问题讨论】:
-
std::swap(a, b)有什么问题? -
应避免使用空指针。你为什么要使用它们?
-
你说的是交换指针还是交换它们指向的对象?
-
交换它们指向的数据/对象/字节
-
注意你在这里做了什么:
void* a = (void*)50;这将a声明为指向void的指针,并将其指向内存地址 50。它不会在指向的地址存储 50通过a,它使a指向地址50 的数据,而50 几乎肯定不是一个有效的使用地址。通常前几千个地址是禁止使用的,并且从未使用过,因为它使捕获意外的空指针访问更容易。*a = *b;然后将坏内存地址的数据分配给另一个坏内存地址的数据,然后 BOOM
标签: c++ pointers casting void-pointers