2015-08-22 142 views
0

我很难传递一个二维数组的结构。二维数组的大小是动态的(取决于给定的输入参数)。我得到的错误:传递二维数组的结构

maze_array.c:76:14: error: incompatible types when assigning to type ‘BlockNode {aka struct BlockNode}’ from type ‘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; 

} 
+0

API变化到'INT InitializeArray(INT MazeWidth,INT MazeHeight,BlockNode *迷宫[MazeWidth] [MazeHeight],整数NumOfAvatars)',并调用作为'InitializeArray(MazeWidth,MazeHeight,迷宫,NumOfAvatars);' – BLUEPIXY

+1

即获得了不工作,BLUEPIXY。 VLA不会以某种方式传递给任何其他数组的功能。 – Peter

回答

1

您还没有真正问一个问题,但我会假设你正在寻找的编译器错误的解释。

在你的函数,Maze[i][j]BlockNode类型的,因为它取消引用BlockNode **(指针的指针为Blocknode)的两倍。 myBlockNodeBlockNode *。这是编译器错误的原因 - 没有有效的some_BlockNode = some_pointer_to_BlockNode形式的赋值。

然而,真正的问题是你没有正确理解指针和数组之间的区别。在任何人能够提供有用的信息(这对您有意义)之前,您需要阅读这些主题,并就如何做到您想要的内容提供建议。

1

你应该考虑到一个二维数组不等于指针的指针,例如,如果你试图编译

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

,你会得到一个类似的错误。

,如果你想通过指针的二维数组,并使用它像AnArray [i] [j] =东西,你应该在函数声明改为

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