考虑以下情况。
我有void * first
指向一定数量的内存。我有另一个void * second
指向别的东西。我想将void * second
保存在第一个指针所指向的内存中。
我的方法:
*(void**) first = second;
这有效吗?是否有任何预防措施需要考虑?
答案 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]