传递二维结构数组

问题描述 投票:0回答:2

我在传递2D结构数组时遇到困难。 2D数组的大小是动态的(取决于给定的输入参数)。我收到错误:

maze_array.c:76:14:错误:从类型‘BlockNode {aka struct BlockNode}’分配给类型‘BlockNode * {aka struct BlockNode *}’时类型不兼容Maze[i][j]=myBlockNode;

这是我的代码:

int main(int argc, char *argv[]){   

    int MazeWidth=1;
    int MazeHeight=1;
    int NumOfAvatars=1;
    BlockNode* Maze[MazeWidth][MazeHeight];
    InitializeArray(Maze[0],MazeWidth,MazeHeight,NumOfAvatars);
    return 1;
}

int InitializeArray(BlockNode** Maze,int MazeWidth, int MazeHeight, int    NumOfAvatars){

for (int i=0; i<MazeWidth;i++)
{
    for (int j=0; j<MazeHeight;j++)
    {
        //Initialize a BlockNode
        printf("HERE1\n");
        BlockNode *myBlockNode;
        myBlockNode=calloc(1,sizeof(BlockNode));
        myBlockNode->North=0;
        myBlockNode->South=0;
        myBlockNode->East=0;
        myBlockNode->West=0;
        int myArray[NumOfAvatars];
        memset(myArray,0,sizeof(myArray));
        memcpy(myBlockNode->AvatarVisited,myArray,sizeof(myArray));

        //Place BlockNode in the Maze
        Maze[i][j]=myBlockNode;
    }
}
/*
printf("North %d\n", Maze[0][0]->North);
printf("AvatarVisted %d\n", Maze[0][0]->AvatarVisited[0]);
*/


return 1;

}
c multidimensional-array struct
2个回答
2
投票

例如,如果您尝试编译,则应考虑到二维数组不等于指向指针的指针...

int array[10][10];
int** p=array;

...您将收到类似的错误。

如果要传递2D指针数组并像AnArray[i][j] = something那样使用它,则应将函数声明更改为...

int InitializeArray( BlockNode* Maze[][MazeHeight]
                   , int MazeWidth
                   , int MazeHeight
                   , int NumOfAvatars )

...或...

int InitializeArray( BlockNode* (*Maze)[MazeHeight]
                   , int MazeWidth
                   , int MazeHeight
                   , int NumOfAvatars )

...并称呼它为...

InitializeArray( Maze
               , MazeWidth
               , MazeHeight
               , NumOfAvatars );

也请阅读this


1
投票

您实际上没有问过一个问题,但是我假设您正在寻求有关编译器错误的解释。

在您的函数中,Maze[i][j]将为BlockNode类型,因为它两次取消引用BlockNode **(指向Blocknode的指针)。 myBlockNode的类型为BlockNode *。这是导致编译器错误的原因-没有有效分配形式为some_BlockNode = some_pointer_to_BlockNode

但是,真正的问题是您没有正确理解指针和数组之间的区别。在任何人都可以提供有用的(对您有意义的)建议之前,您需要阅读这些主题。

© www.soinside.com 2019 - 2024. All rights reserved.