我尝试在C中执行此操作并崩溃:
int nValue=1;
void* asd;
asd[0]=&nValue;
出现以下错误:
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
我可以在C中使用void指针作为数组吗?
如果可以的话,这样做的正确方法是什么?
答案 0 :(得分:3)
我可以在C中使用void指针作为数组吗?
不。你可以转换为void*
,但是你不能对它进行修改,当你考虑它时它就有意义了。
它指向未知类型,因此大小也未知。因此,您不可能对它执行指针运算(这是asd[0]
所做的),因为您不知道从基指针偏移了多少字节,也不知道要写入多少字节。
在旁注中,asd
(可能)指向无效内存,因为它未初始化。写或读它会调用未定义的行为。
答案 1 :(得分:0)
int main()
{
int iv = 4;
char c = 'c';
void *pv[4];
pv[0] = &iv;
pv[1] = &c;
printf("iv =%d, c = %c", *(int *)pv[0], *(char *)pv[1]);
return 0;
}