取消引用一个void指针数组

时间:2013-04-12 07:12:17

标签: c pointers malloc

我有一组void指针,我想把它放在一个void指针数组中。我从malloc开始:

void **p2vals=malloc(nelems*sizeof(void*));

..它给了我一个指向指针的数组。但后来我想取消引用像p2vals这样的p2vals,据说这个p2vals会得到一个无效指针。当然编译器不喜欢它,但我需要它。我想设置

*(p2vals+someoffset)=somevoidptr;

2 个答案:

答案 0 :(得分:0)

考虑,

int a = 5;
int *p = &a;

在这种情况下,我们向编译器指出p将指向一个整数。所以众所周知,当我们在运行时执行*p之类的操作时,不会。将读取等于int大小的字节数。

取消引用void指针,编译器将无法理解要读取多少字节。您之前需要将它们转换为某些type  使用它们

答案 1 :(得分:0)

如果您想将内存地址存储为变量,建议您使用uintptr_t代替void *。如果您想要写入或读取任何偏移量,请执行(uintptr_t)((char *)(pointer) + offset)