在我的程序中,我无数次遇到了同样的2个错误。这是解决问题的程序的一小部分:
void update_table(char ary[SIZE][SIZE], int row, int column, char token)
{
if(token == 'X')
ary[row][column] = 'X';
else if(token == 'O')
ary[row][column] = 'O';
}
...
void generate_player2_move(char a[SIZE][SIZE], int rw, int cn)
{
char type = 'X';
srand(time(NULL));
rw = rand() % 3;
cn = rand() % 3;
while(check_legal_option(a[SIZE][SIZE], rw, cn) == 1)
{
rw = rand() %3;
cn = rand() %3;
}
printf("Player 2 has entered [row, col]: %d,%d", rw, cn);
update_table(a[SIZE][SIZE], rw, cn, type);
display_table(a[SIZE][SIZE]);
}
这些是我遇到的两种错误:
note: expected ‘char (*)[3]’ but argument is of type ‘char’
void update_table(char ary[SIZE][SIZE], int row, int column, char token)
和
warning: passing argument 1 of ‘update_table’ makes pointer from integer without a cast [-Wint-conversion] update_table(a[SIZE][SIZE], rw, cn, type);
我对第一个错误很困惑,因为我认为参数是char * [3]
,然后我不太明白第二个错误。
答案 0 :(得分:2)
在致电a[SIZE][SIZE]
,a
和check_legal_option()
时,您正在传递update_table()
而非display_table()
。
a[SIZE][SIZE]
尝试访问行a
和列SIZE
中的SIZE
元素,这会让您超出范围;您只需要在接受SIZE
作为参数的任何函数声明中声明a
。
答案 1 :(得分:1)
generate_player2_move函数的参数声明为char a [SIZE] [SIZE]。显然你试图通过二维数组的字符。但是,当您传递数组时,实际上是将指针传递给数组中的第一个元素。你没有传递数组本身。因此,因为二维数组实际上是一个数组数组,所以参数的声明应该是一个指向SIZE字符数组的数组的指针。该参数应声明如下:char(* a)[SIZE]