У меня есть этот вызов для файла с именем 'PlayBoard.c':
MoveSucc = putBoardSquare(theBoard, getX, getY, nextTurn);
Где 'theBoard' - указатель на структуру Board. Внутри функции я изменяю размер платы, ссылаясь на указатель на ДРУГУЮ структуру доски, более крупную. Изменит ли он «theBoard» на «PlayBoard.c», где вызывается MoveSucc?
РЕДАКТИРОВАТЬ: putBoardSquare определен в другом исходном файле
РЕДАКТИРОВАТЬ: я добавил соответствующие функции
Boolean putBoardSquare(BoardP theBoard, int X, int Y, char val)
{
if (val != 'X' && val != 'O')
{
reportError(BAD_VAL);
return FALSE;
}
if (X<0 || Y<0)
{
reportError(OUT_OF_BOUND);
return FALSE;
}
if (X>theBoard->height || Y>theBoard->width)
{
theBoard = expandBoard(theBoard, X,Y);
}
printf("BOARD SIZE IS %d*%d\n",theBoard->height,theBoard->width);
if (theBoard->board[X][Y] == 'X' || theBoard->board[X][Y] == 'Y' )
{
reportError(SQUARE_FULL);
return FALSE;
}
if (val != turn)
{
reportError(WRONG_TURN);
return FALSE;
}
theBoard->board[X][Y] = val;
printf("PUT %c\n",theBoard->board[X][Y]);
changeTurn(val);
return TRUE;
}
static BoardP expandBoard(ConstBoardP theBoard, int X, int Y)
{
int newWidth = theBoard->width;
int newHeight = theBoard->height;
if (X>theBoard->height)
{
newHeight = (newHeight+1) * 2;
}
if (Y>theBoard->width)
{
newWidth = (newWidth+1) * 2;
}
BoardP newBoard = createNewBoard(newWidth,newHeight);
copyBoard(theBoard,newBoard);
printf("RETUNRNING NEW BOARD OF SIZE %d*%d\n",newHeight,newWidth);
return newBoard;
}
Как вы можете видеть, когда пользователь пытается поместить 'X' или 'O' за пределы доски, его нужно развернуть, что происходит (я знаю, потому что я напечатал новый размер платы в expandBoard () и в putBoardSquare ()). Но указатель в PlayBoard.c, похоже, все равно не меняется ....
Мой вопрос: как я могу изменить указатель структуры, передаваемой в качестве аргумента другой функции? В «PlayBoard.c» я передаю одну структуру в качестве аргумента и хочу, чтобы putBoardSquare ссылался на нее в другой структуре, которая также будет действовать в PlayBoard.c.
Я ясно?