这是我对gameoflife的最终版本。我有这个错误错误我无法解决。请帮我解决这个问题:
1智能感知:“
int (*)[50]
”类型的参数与“int *
”类型的参数不兼容 第79行print(board, HEIGHT, WIDTH);
void print(int *board, int rows, int cols)
{
int x, y;
char c;
for (y = 0; y < rows; y++) {
for (x = 0; x < cols; x++) {
if (*(board + y*cols + x) == 1)
printf("X");
else
printf(" ");
}
printf("\n");
}
printf("Press any key to continue:\n");
getchar();
}
答案 0 :(得分:1)
该错误意味着您正在尝试向函数传递类型为“指向int的50个指针的数组”的参数,而它应该获取类型为“指向int的指针”的参数(也可以是数组)。
在您的情况下,print()
函数的签名可能会更改为获得int board[][WIDTH]
而不是int *
现在获得的内容。
签名的更改还需要更改功能代码,因此行
if (*(board + y*cols + x) == 1)
应改为:
if (board[y][x] == 1)
答案 1 :(得分:0)
你的print函数需要一个指向int的指针,但是你传递的是一个二维数组,它会衰减到指向一维数组的指针。将电路板转换为int*
或转换print()
以处理2-d数组。
投出电话会看起来像这样:
print((int *)board, HEIGHT, WIDTH);
转换print()
以将2D数组作为参数看起来像这样:
void print(int board[][WIDTH])
{
int x, y;
char c;
for (y = 0; y < HEIGHT; y++) {
for (x = 0; x < WIDTH; x++) {
if (board[y][x] == 1)
printf("X");
else
printf(" ");
}
printf("\n");
}
printf("Press any key to continue:\n");
getchar();
}
答案 2 :(得分:0)
void print(int *board, int rows, int cols)
...
int board[HEIGHT][WIDTH];
...
print(board, HEIGHT, WIDTH);
您的print
函数第一个参数的类型为int *board
,但您使用int (*)[50]
类型的参数调用该函数。
您应修复print
函数原型(和正文)以使用正确类型的参数(即int (*)[50]
)。
答案 3 :(得分:0)
您的board
是一个双数组。它有高度和宽度。如果您希望打印件中有*board
参数,则实际上您只需要一个维度。要让错误消失,您必须通过int (*board)[WIDTH]
。
将二维数组传递给函数时,必须包含其中一个维的大小。所以你的board[HEIGHT][WIDTH]
必须至少传递有关它宽度的信息。所以:board[][WIDTH]
。您可以将那些空[]
并将其作为指针写在电路板前面。
所以,在你的主要部分你正确地调用你的函数,但你必须编辑你的函数头像:
void print(int (*board)[WIDTH], int rows, int cols){
答案 4 :(得分:0)
你宣布
void print(int *board, int rows, int cols)
但在您使用的其他功能中
foo(int board[][WIDTH], int rows)
保持相同或声明为
(int **board, int rows, int cols )
答案 5 :(得分:0)
为什么不像sverre告诉你的那样,因为多维数组实际上是一个抽象,编译器提供的不是为了找到row_th和col_th元素所做的数学
只需将其称为print((int *)board,HEIGHT,WIDTH);