int(*)[4]类型的参数与参数类型" int *"不兼容。我正在使用visual studio

时间:2017-03-22 06:28:42

标签: c arrays

我在将二维数组传递给函数的c程序中出错。错误如标题中所述。我正在使用visual studio 2015。

#include<stdio.h>
#include<math.h>


int main()
{
 int display(int*, int, int);
 int a[3][4] = {
    1, 2, 3, 4,
    5, 6, 7, 8,
    9, 0, 1, 6
    };
 display(a, 3, 4);
}
int display(int *q, int row, int col)
 {
  int i,j;
  for (i = 0; i <= 2; i++)
  {
    for (j = 0; j <= 3; j++)
        printf("%d", *(q + i*col + j));
    printf("\n");
  }
 printf("\n");
}

2 个答案:

答案 0 :(得分:0)

在这一行的背景下

  display(a, 3, 4);

a的类型为int [3][4](数组类型),它衰减为int (*)[4](指向数组第一个元素的指针),int *不是匹配它。

您需要相应地调整函数签名/调用,即

  • 将参数更改为int (*)[4]并相应地使用它。
  • 更改调用以传递第一个1-D数组的第一个元素的地址,如BLUEPIXY提到的上述注释。

也就是说,看到缺少的return语句和函数调用的使用,您可以安全地将函数的返回类型更改为void

答案 1 :(得分:-1)

a 投射到(int *)a ,如下所示:

display( (int*) a, 3, 4 );