我不理解对我的代码的警告。看起来很简单,但我很简单,不明白。这是一段有问题的代码:
chunk* findChunk(chunk *ptr, int size)
{
...
chunk *newNode = ptr->end + size;
...
}
chunk是我之前定义的结构:
typedef struct chunk
{
int size;
int available;
struct chunk* next;
char end[1];
} chunk;
这是我收到的警告:
warning: initialization from incompatible pointer type [enabled by default]<br>
chunk *newNode = ptr->end + size;
我无法理解,对我来说很明显newNode和ptr是同一类型。我错过了什么?谢谢你们。
答案 0 :(得分:4)
当您将两个已声明为指向不同类型的指针等同在一起时,会出现不兼容的警告类型。这是允许的,因为也许你作为编码员知道它会起作用,但它通常不会,这就是你得到警告的原因。
在您的代码中,您已将结构的end
字段定义为类型为char *
的1x1字符数组,但在第一个代码段中,您尝试将其等同于chunk *
。在您的代码中,您可能希望使用next
代替end
。
另外,我强烈建议不要使用向指针添加整数,除非你完全确定你在做什么。即使在那时,也许有更安全,更好的方式来实现你正在尝试的任何东西。
另外,为什么要使用单个元素创建char数组?这对我来说似乎很奇怪。