与“int *”类型的参数不兼容

时间:2012-01-21 15:15:51

标签: c arrays pointers

这是我对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();
}

6 个答案:

答案 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);