我有一组void指针,我想把它放在一个void指针数组中。我从malloc开始:
void **p2vals=malloc(nelems*sizeof(void*));
..它给了我一个指向指针的数组。但后来我想取消引用像p2vals这样的p2vals,据说这个p2vals会得到一个无效指针。当然编译器不喜欢它,但我需要它。我想设置
*(p2vals+someoffset)=somevoidptr;
答案 0 :(得分:0)
考虑,
int a = 5;
int *p = &a;
在这种情况下,我们向编译器指出p将指向一个整数。所以众所周知,当我们在运行时执行*p
之类的操作时,不会。将读取等于int大小的字节数。
取消引用void指针,编译器将无法理解要读取多少字节。您之前需要将它们转换为某些type
使用它们
答案 1 :(得分:0)
如果您想将内存地址存储为变量,建议您使用uintptr_t
代替void *
。如果您想要写入或读取任何偏移量,请执行(uintptr_t)((char *)(pointer) + offset)
。