首页 > 解决方案 > 如何将双指针传递给C中的数组元素?

问题描述

所以我在这里有这个结构

typedef struct piece
{

    block* blocks;

    unsigned short numOfBlocks;
    unsigned short color;

    unsigned short width;
    unsigned short height;

    signed short minX;
    signed short minY;

} piece;

每一块都有一个指向块数组的指针。这是我制作的另一个结构。

此外,我还有一个函数可以在运行时动态创建这些片段,看起来像这样:

piece* generateGamePiece(unsigned short size)
{

    piece* Piece = NULL;

    Piece = malloc(sizeof(*Piece));
    
    if (Piece != NULL)
    {

        if (size > 0)
            Piece->blocks = malloc(size * sizeof(*Piece->blocks));

    }

    ...

    return Piece;

}

为了释放这些部分分配的内存,我有一个如下所示的 delPiece 函数:

void delPiece(piece** Piece)
{

    free((*Piece)->blocks);
    (*Piece)->blocks = NULL;

    free(*Piece);
    *Piece = NULL;

}

所以我可以像这样轻松地创建和销毁单件:

piece* newPiece = NULL;
newPiece = generateGamePiece(5);

...

delPiece(&newPiece);

但是,如果我有一个指向函数返回的片段数组的指针,则如下所示:

piece* pieceArray = NULL;
pieceArray = generatePieceAray();

然后我尝试删除数组中的每一块:

for (unsigned short i = 0; i < NUM_OF_PIECES; i++)
    delPiece(&pieceArray[i]);   
free(pieceArray);
pieceArray = NULL;

我收到一个编译器警告,在“delPiece(&pieceArray[i]);”行中,函数“预期为 'piece **' 但参数的类型为 'piece *'”

我该如何解决这个问题?将指针传递给指向数组元素的指针的正确方法是什么?

标签: arrayscpointersstructure

解决方案


推荐阅读