gpt4 book ai didi

更改指向结构的指针,通过引用传递

转载 作者:行者123 更新时间:2023-11-30 14:27:57 25 4
gpt4 key购买 nike

我对名为“PlayBoard.c”的文件进行了此调用:

MoveSucc = putBoardSquare(theBoard, getX, getY, nextTurn);

其中“theBoard”是指向结构体 Board 的指针。在函数内部,我通过引用另一个更大的 Board 结构的指针来更改 board 的大小。它会改变调用 MoveSucc 的“PlayBoard.c”上的“theBoard”吗?

编辑: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 中生效。

我说清楚了吗?

最佳答案

编辑

theBoard = expandBoard(theBoard, X,Y);

此赋值仅更改局部变量。您必须添加一层间接,如下所示:

MoveSucc = putBoardSquare(&theBoard, getX, getY, nextTurn);

Boolean putBoardSquare(BoardP *theBoard, int X, int Y, char val)
{
/* ... */
*theBoard = expandBoard(theBoard, X,Y);
/* ... */
}
<小时/>

您的问题很令人困惑(也许您应该发布您拥有的代码),但您遇到的错误仅仅是由于 PlayBoard.c 中不可用的结构定义引起的。例如,如果您只有

struct foo;
void foo(struct foo *foov) { ... }

没有可用的 foo 定义,如

struct foo { int a; ... }

那么您将无法访问该结构的成员(请参阅“不透明类型”)。

关于更改指向结构的指针,通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com