0

我尝试在 C 中执行此操作,但它崩溃了:

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

出现以下错误:

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

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

如果可以,正确的方法是什么?

4

2 回答 2

3

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

没有。您可以转换为 和 from void*,但不能服从它,当您考虑它时,它是有道理的。

它指向一个未知类型,所以大小也是未知的。因此,您不可能对其执行指针算术(这就是这样asd[0]做的),因为您不知道要从基指针偏移多少字节,也不知道要写入多少字节。

在旁注中,asd(可能)指向无效内存,因为它未初始化。写入或读取它会调用未定义的行为。

于 2012-09-14T00:17:58.603 回答
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;
}
于 2012-09-14T00:49:14.640 回答