动态数组和void指针

时间:2011-03-23 00:39:54

标签: c++ new-operator void

我有一个非常特殊的问题。我想初始化一个由void指针指向的数组,使用new分配内存,如下所示。

const int ARRAY_SIZE = 10;
void InitArray()
{
    int *ptrInt = new int[ARRAY_SIZE];
    for(int i=0; i<ARRAY_SIZE;i++)
    {
         ptrInt[i] = 1; //OK
    }

    void *ptrVoid = new int[ARRAY_SIZE];
    for(int i=0; i<ARRAY_SIZE;i++)
    {
         *(int*)ptrVoid[i] = 1; //Culprit  : I get a compiler error here 
                                //(error C2036: 'void *' : unknown size)
    }
}

现在,我想初始化这个数组的元素,ptrVoid指向的是1.我该怎么做?使用此代码,我得到编译器错误,如代码中所示(我正在使用VS 2010)。有什么建议吗?

4 个答案:

答案 0 :(得分:9)

您有操作订单问题(以及额外的*)。在第二个循环中尝试这个:

((int *)ptrVoid)[i] = 1;

答案 1 :(得分:2)

*(int*)ptrVoid[i]*((int*)(ptrVoid[i])),您解除引用次数过多([]取消引用)。

撰写((int*)ptrVoid)[i](或更好,static_cast<int*>(ptrVoid)[i]),然后重新考虑使用void*

答案 2 :(得分:1)

您只需要正确地加上括号并将void*强制转换为int*,以便编译器知道在使用[i]对其进行索引时要偏移的字节数。

for(int i=0; i<ARRAY_SIZE;i++)
{
     ((int*)ptrVoid)[i] = 1;
}

答案 3 :(得分:0)

怎么样:

int* ptrVoidAsInt = new int[ARRAY_SIZE];
for(int i=0; i<ARRAY_SIZE;i++)
{
     ptrVoidAsInt[i] = 1;                               
}
void* ptrVoid = ptrVoidAsInt;

但是,人们不得不想知道void数组或1初始化数据的含义是什么。这真的是一个int或其他类型的数组,它将作为void *传递,然后重新返回到一个类型化的数组吗?