我尝试在 C 中执行此操作,但它崩溃了:
int nValue=1;
void* asd;
asd[0]=&nValue;
出现以下错误:
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
我可以在 C 中使用 void 指针作为数组吗?
如果可以,正确的方法是什么?
我尝试在 C 中执行此操作,但它崩溃了:
int nValue=1;
void* asd;
asd[0]=&nValue;
出现以下错误:
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
我可以在 C 中使用 void 指针作为数组吗?
如果可以,正确的方法是什么?
我可以在 C 中使用 void 指针作为数组吗?
没有。您可以转换为 和 from void*
,但不能服从它,当您考虑它时,它是有道理的。
它指向一个未知类型,所以大小也是未知的。因此,您不可能对其执行指针算术(这就是这样asd[0]
做的),因为您不知道要从基指针偏移多少字节,也不知道要写入多少字节。
在旁注中,asd
(可能)指向无效内存,因为它未初始化。写入或读取它会调用未定义的行为。
你可以这样写:
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;
}