我有一组 void 指针,我想将它们放入一个 void 指针数组中。我从 malloc 开始:
void **p2vals=malloc(nelems*sizeof(void*));
..这给了我一个指向指针的数组。但是后来我想取消引用像 *p2vals 这样的 p2vals ,这应该让我得到一个 void 指针。当然编译器不喜欢它,但我需要它。我想设置
*(p2vals+someoffset)=somevoidptr;
考虑,
int a = 5;
int *p = &a;
在这种情况下,我们向编译器表明 p 将指向一个整数。因此,众所周知,当我们*p
在运行时执行类似的操作时,没有。将读取等于 int 大小的字节数。
取消引用 void 指针,编译器将不知道要准确读取多少字节。type
在使用它们之前,您需要将它们类型转换为一些
如果您想将内存地址存储为变量,我建议您使用uintptr_t
而不是void *
。如果您想写入或读取任何偏移量,只需执行(uintptr_t)((char *)(pointer) + offset)
.