によって渡された構造体へのポインタを、変更します。関数の中で、私は他のボード構造体へのポインタを参照することによって、ボードのサイズを変更しています。 MoveSuccが呼び出される 'PlayBoard.c'の 'theBoard'が変更されますか?は、私は「PlayBoard.c」と呼ばれるファイルにこのコールを持っている参照
EDIT:ユーザーが「X」または「Oを配置しようとしたとき、私が追加した関連機能
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;
}
あなたが見ることができるように:putBoardSquareは、別のソースファイルに
EDITを定義しています'ボードの外では、expandBoard()とputBoardSquare()で新しいボードのサイズを印刷したため、拡張する必要があります。しかし、 'PlayBoard.c'のポインタはとにかく変更されていないようです....
私の質問:別の関数に引数として渡された構造体のポインタを変更するにはどうすればよいですか? 'PlayBoard.c'では、引数として1つの構造体を渡します。また、putBoardSquareが別の構造体にrefrenceするようにします。これはPlayBoard.cでも有効です。
私はクリアですか?
より関連性の高いコードを入力してください。この質問は、現在の形で簡単には答えられません。 –
私は誤った質問に答えたので私の答えを削除しましたが、ポインタが更新されないという問題は、theBoardのポインタへのポインタが必要なためです(BoardPが単純なポインタだと仮定します)。 – Makis
もっと詳しく説明できますか?ポインタへのポインタは何が必要ですか? 私は、関数の引数としてポインタを渡すと、それも関数の外で有効になると思っていました。 – yotamoo