在函数中传递参数时重复出错

时间:2018-03-27 21:38:39

标签: c function

在我的程序中,我无数次遇到了同样的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],然后我不太明白第二个错误。

2 个答案:

答案 0 :(得分:2)

在致电a[SIZE][SIZE]acheck_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]