2015-08-22 184 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