我很难传递二维结构数组。二维数组的大小是动态的(取决于给定的输入参数)。我知道错误:
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;

}

最佳答案

您实际上没有提出问题,但我假设您正在寻找编译器错误的解释。
在您的函数中,Maze[i][j]将是BlockNode类型,因为它取消对BlockNode **(指向Blocknode指针的指针)的引用两次。myBlockNode属于BlockNode *类型。这就是编译器错误的原因-没有有效的some_BlockNode = some_pointer_to_BlockNode格式赋值。
然而,真正的问题是,您没有正确理解指针和数组之间的区别。在任何人能够就如何做你想做的事提供有用的建议(这对你来说是有意义的)之前,你需要阅读这些主题。

关于c - 传递2D结构数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32152026/

10-11 18:51