我正在编写一个Tic-Tac-Toe程序,并且正在编写一个用于玩家轮到的函数。我以指针b
的形式传入了Tic-Tac-Toe板(一个3x3数组)。唯一的问题是,在最后一行,我得到了标题中的错误。
下标的值既不是数组,也不是指针,也不是向量:b[PlayerCoordsX][PlayerCoordsY] = "x";
只是为了测试,我尝试了多个不同的=
值。字符和数值都不能解决这个问题。
以下是缩写的代码(我希望)是相关的部分:
void PlayerTurn(int *b);
...
int main(void)
{
int Board[2][2];
int (*b)[2][2];
b = &Board;
...
void PlayerTurn(int *b);
...
return 0;
}
void PlayerTurn(int *b)
{
int PlayerCoordsX, PlayerCoordsY;
while ((PlayerCoordsX != 1 || PlayerCoordsX != 2 || PlayerCoordsX != 3) && (PlayerCoordsY != 1 || PlayerCoordsY != 2 || PlayerCoordsY != 3))
{
printf("Enter the X coordinate you would like to use:");
scanf("%i", &PlayerCoordsX);
PlayerCoordsX = PlayerCoordsX - 1;
printf("Enter the Y coordinate you would like to use:");
scanf("%i", &PlayerCoordsY);
PlayerCoordsX = PlayerCoordsY - 1;
}
b[PlayerCoordsX][PlayerCoordsY] = "x";
}
发布于 2013-07-11 06:19:31
由于b
是指向int指针,
b[PlayerCoordsX]
为整数,则不能为b[PlayerCoordsX]
添加下标。你需要一个指向int的指针:
int **b;
然后,您可以执行双重间接操作。或者,如果您有平面数组,请计算索引,而不是使用双索引:
b[PlayerCoordsY * numCols + PlayerCoordsX] = "x";
如果你像你这样定义电路板:
int board[3][3];
然后您可以将函数签名更改为:
void PlayerTurn(int b[][3])
发布于 2013-07-11 06:19:23
您的参数b
是一个指向整数的指针。这意味着b[PlayerCoordsX]
是一个整数,因此b[PlayerCoordsX][PlayerCoordsY]
基本上是在尝试使用int
(“下标的值”)作为数组。
将二维数组传递给函数时,编译器需要知道数组中的列数。这是因为数组是laid out as a linear block of memory,编译器需要计算该线性数组中的索引。
所以你需要通过
void PlayerTurn(int b[][2])
{
}
但最好是使用#define
大小,而不是使用“神奇”值2
。
https://stackoverflow.com/questions/17586289
复制相似问题