将指针保存到void指针指向的内存

Lau*_*kas 0 c++ memory pointers void

考虑以下情况.

void * first指着一定量的记忆.我有另一个void * second指向别的东西.我想保存void * second在第一个指针所指向的内存中. 在此输入图像描述

我的方法:

*(void**) first = second;

这有效吗?是否有任何预防措施需要考虑?

小智 5

您可以将所需内容写入指向的内存位置void*,只要:

  • 它足以容纳该数据类型
  • 它与数据类型充分对齐
  • 从与写入一致的位置读取

因此,做以下事情是合法的:

void* first = malloc(sizeof(void*));
*(void**)first = second;
....
void* another = *(void**)first; //Now another == second
Run Code Online (Sandbox Code Playgroud)

但其他任何事情,例如:

  • malloc(sizeof(int*)), 要么 malloc(4)
  • void* first = &someCharArray[11]
  • int* another = *(int**)first

实施是否充分定义.有时未定义的行为.

这正是什么void*类型 - 你投了一些指针void*,然后你回头.您负责匹配的类型.