C 在gameBoard中实现以下函数的代码

C 在gameBoard中实现以下函数的代码,c,arraylist,void-pointers,C,Arraylist,Void Pointers,我对虚空指针很困惑。到目前为止,对于第一种方法,这就是我所拥有的。 基本上,由于我不明白发生了什么, 我刚刚重复了函数的参数,试图对它们进行初始化。 这是正确的吗?如果不是的话,我该怎么办 gameBoard *InitBoard(char *space, int nos,void (*toStringGameboard)(void *S), int (* getNumberOfSpaces) (void * S),char * (* getTypeOfSpace)(void * S))

我对虚空指针很困惑。到目前为止,对于第一种方法,这就是我所拥有的。 基本上,由于我不明白发生了什么, 我刚刚重复了函数的参数,试图对它们进行初始化。 这是正确的吗?如果不是的话,我该怎么办

gameBoard *InitBoard(char *space, int nos,void (*toStringGameboard)(void *S), int (* getNumberOfSpaces) (void * S),char * (* getTypeOfSpace)(void * S))
    {
        gameBoard *gb= (gameBoard *) malloc(sizeof(gameBoard));
        strcpy(gb->typeOfSpace, space);
        //implement the function pointers
        return gb;
    }

    char * getTypeOfSpace(void  *board) {
        return ???;
    }
    
    int getNumberOfSpaces(void * board) {
        return ???;
    }

    void toStringGameboard(void * S){
    //print out something informative and cute
        return;
    }
对于第二种方法,我想我可以使用写入gameBoard.h中的char-typeOfSpace[20],但不完全确定如何实现:

gameBoard *InitBoard(char *space, int nos,void (*toStringGameboard)(void *S), 
          int (* getNumberOfSpaces) (void * S),char * (* getTypeOfSpace)(void * S))
{
    gameBoard *gb= (gameBoard *) malloc(sizeof(gameBoard));
    strcpy(gb->typeOfSpace, space);
    void(*toStringGameboard)(void *S);
    int(*NumberOfSpaces)(void *S);
    char(*getTypeOfSpace)(void *S);
    return gb;
}

没有关于如何做的第二个两个线索,任何帮助将是极好的

InitBoard
中,显然要初始化
gb
的字段

gameBoard*InitBoard(
字符*空间,
国际编号,
无效(*toStringGameboard)(无效*S),
int(*getNumberOfSpaces)(void*S),
char*(*getTypeOfSpace)(void*S)
) {
gameBoard*gb=malloc(sizeof(gameBoard));
strcpy(gb->typeOfSpace,space);
gb->numberOfSpaces=???;
gb->getNumberOfSpaces=???;
gb->toStringGameboard=???;
gb->getTypeOfSpace=???;
返回gb;
}
事实证明,所有必要的值都作为参数提供

gameBoard*InitBoard(
字符*空间,
国际编号,
无效(*toStringGameboard)(无效*S),
int(*getNumberOfSpaces)(void*S),
char*(*getTypeOfSpace)(void*S)
) {
gameBoard*gb=malloc(sizeof(gameBoard));
strcpy(gb->typeOfSpace,space);
gb->numberOfSpaces=个;
gb->getNumberOfSpaces=getNumberOfSpaces;
gb->toStringGameboard=toStringGameboard;
gb->getTypeOfSpace=getTypeOfSpace;
返回gb;
}

调用
getTypeOfSpace
(etc)的意图如下:

gb->getTypeOfSpace(gb)
因此,其他的
board
参数实际上是
gameBoard*

char*gettypeof空间(void*board){
gameBoard*gb=棋盘;
返回???;
}

谢谢!这是有道理的。我有一个后续问题。有一个类似的函数:Player InitPlayers(char*name,void(setPosition)(void*s,int pos),void(toStringPlayers)(void*s),int(*getPosition)(void*s),char*(getName)(void*s)){Player*Player=(Player*)malloc(sizeof(Player));strcpy(Player->name,name);//设置函数指针返回player;}哇,格式很糟糕,但我想知道第二个参数是否需要player->positionInBoard=pos。我试过这个,结果不起作用。我不需要一个在船内的位置吗?我不确定它是如何与具有不同参数格式的setPosition一起工作的。我不知道什么是
Player
typedef struct gameBoard {
    char typeOfSpace[20];   //"WIN", "BACK", "FORWARD", "SAFE"
    int numberOfSpaces; //if the type of space is "BACK", "FORWARD", then this is the number of spaces to move
        int (* getNumberOfSpaces) (void * S);
    void (* toStringGameboard)(void * S);
    char * (* getTypeOfSpace)(void * S);
}gameBoard;

gameBoard *InitBoard(char *typeOfSpace, int nos,
                    void (*toStringGameboard)(void *S), 
                    int (* getNumberOfSpaces) (void * S),
                    char * (* getTypeOfSpace)(void * S));

char * getTypeOfSpace(void  *board);
int getNumberOfSpaces(void *board);
void toStringGameboard(void *board);