传递二维结构数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传递二维结构数组相关的知识,希望对你有一定的参考价值。
我在传递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
");
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
", Maze[0][0]->North);
printf("AvatarVisted %d
", Maze[0][0]->AvatarVisited[0]);
*/
return 1;
}
答案
例如,如果您尝试编译,则应考虑到二维数组不等于指向指针的指针...
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。
另一答案
您实际上没有问过一个问题,但是我假设您正在寻求有关编译器错误的解释。
在您的函数中,Maze[i][j]
将为BlockNode
类型,因为它两次取消引用BlockNode **
(指向Blocknode
的指针)。 myBlockNode
的类型为BlockNode *
。这是导致编译器错误的原因-没有有效分配形式为some_BlockNode = some_pointer_to_BlockNode
。
但是,真正的问题是您没有正确理解指针和数组之间的区别。在任何人都可以提供有用的(对您有意义的)建议之前,您需要阅读这些主题。
以上是关于传递二维结构数组的主要内容,如果未能解决你的问题,请参考以下文章