警告:为2D数组指针指定不兼容的指针类型

时间:2014-08-17 05:02:29

标签: c arrays pointers warnings

我为我的问题的简单性及其与已经提出的问题的相似性道歉。我已经查看了类似的问题,并且已经研究了好几个小时了,而且我无法理清任何阻碍我理解它的错误观念。

在下面的代码摘录中,警告'从不兼容的指针类型分配[默认情况下启用] '发生在注释为“警告”的行上的等号上。

char * readFile(int width, int height)
{
    char mapArray[width][height];
    char *p;
    p = mapArray;     // Warning
    return p;
}

为什么?

我目前理解的是'mapArray'包含二维chars数组的第一个元素的地址。 'p'的定义使得它将来会包含存在char的内存中另一个地方的地址。然后将'p'的值设置为'mapArray'的当前值,因此它现在包含所述数组的第一个元素的地址。该函数返回p的值,它是一个地址,即指针,指向内存中的char。

如果有人能告诉我理解失败的地方,以及不兼容的指针类型进入此处,我会非常感激。

2 个答案:

答案 0 :(得分:0)

mapArray的返回类型为char()[height],而您声明的指针p的类型为char 。因此,p只能将指针指向一个一维数组。如果您按以下方式编写,则不会得到警告,因为mapArray [0]返回了指向高度字符的一维数组的指针:

p = mapArray [0];

答案 1 :(得分:-1)

您无法使用char mapArray[width][height]

表达式必须具有常量值。

char (*p)[height]

也是如此

当你不知道它的大小时,你应该为你的数组分配内存。

这样的事情:

char * readFile(int width, int height)
{
    char **mapArray;
    mapArray = (char **)malloc(sizeof(char *)* width);
    for (int i = 0; i < height; i++)
        mapArray[i] = (char *)malloc(sizeof(char)* width);
    char *p;
    p = *mapArray;
    return p;
}