我有一个指向固定大小整数元素数组的指针。填充该数组后,我将其分配给void*pBuff。稍后,我需要通过void指针来访问数组元素,但这样做失败了。
下面是使用C的代码:

void * pBuff = NULL;

int
set_data(void *pBuff)
{
    int ptr = 10, i;
    int phy_bn[8] = {0};
    int (*pPB)[8];

    for(i=0; i<8; i++){
        phy_bn[i] = ptr;
    }

    pPB = &phy_bn;
    pBuff = pPB;

    return 0;
}


int main()
{
    int i;

    set_data(&pBuff);

    for(i =0 ; i <8; i++){
         printf("\ndata : %d\n", *(int *)pBuff[i]);
    }
    return 0;
}

它提示对*(int*)pBuff[i]将“void”项的错误转换为非“void”。
任何帮助都将不胜感激。
谢谢,
-山姆

最佳答案

除了您需要使用:

((int*)pBuff)[i]

代码中的内容是未定义的行为。
pBuff = pPB;

pBuff指向函数的局部数组,它的生存期不存在于函数作用域之外。所以你有一个指针指向一些不需要存在但有时可能存在的东西。

10-07 14:29