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

时间:2015-08-02 19:16:09

标签: c++ pointers memory void

考虑以下情况。

我有void * first指向一定数量的内存。我有另一个void * second指向别的东西。我想将void * second保存在第一个指针所指向的内存中。 enter image description here

我的方法:

*(void**) first = second;

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

2 个答案:

答案 0 :(得分:5)

您可以在void*指向的内存位置写入您想要的任何内容,只要:

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

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

void* first = malloc(sizeof(void*));
*(void**)first = second;
....
void* another = *(void**)first; //Now another == second

但其他任何事情,例如:

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

最好是实施定义。有时未定义的行为。

这正是void*类型的内容 - 你向void*投射了一些指针,然后你又回来了。您负责匹配的类型。

答案 1 :(得分:0)

试试这个

#include <string.h>
#include <stdlib.h>

int main()
{
    int memory[10];
    void *first = ( void * )memory;
    void *second = ( void * )&memory[5];

    *( int * )first = ( int )second;

    return 0;
}

您可以在内存中验证结果[0]