我可以在C中使用void指针作为数组吗?

时间:2012-09-14 00:00:10

标签: c arrays undefined-behavior void-pointers

我尝试在C中执行此操作并崩溃:

int nValue=1;   
void* asd;  
asd[0]=&nValue;

出现以下错误:

*error C2036: 'void**' *: unknown size  
error C2100: illegal indirection*

我可以在C中使用void指针作为数组吗?

如果可以的话,这样做的正确方法是什么?

2 个答案:

答案 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;
}