我为我的问题的简单性及其与已经提出的问题的相似性道歉。我已经查看了类似的问题,并且已经研究了好几个小时了,而且我无法理清任何阻碍我理解它的错误观念。
在下面的代码摘录中,警告'从不兼容的指针类型分配[默认情况下启用] '发生在注释为“警告”的行上的等号上。
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。
如果有人能告诉我理解失败的地方,以及不兼容的指针类型进入此处,我会非常感激。
答案 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;
}