关于不兼容的指针类型的警告

时间:2014-09-28 04:00:27

标签: c pointers types warnings

我不理解对我的代码的警告。看起来很简单,但我很简单,不明白。这是一段有问题的代码:

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是同一类型。我错过了什么?谢谢你们。

1 个答案:

答案 0 :(得分:4)

当您将两个已声明为指向不同类型的指针等同在一起时,会出现不兼容的警告类型。这是允许的,因为也许你作为编码员知道它会起作用,但它通常不会,这就是你得到警告的原因。

在您的代码中,您已将结构的end字段定义为类型为char *的1x1字符数组,但在第一个代码段中,您尝试将其等同于chunk *。在您的代码中,您可能希望使用next代替end

另外,我强烈建议不要使用向指针添加整数,除非你完全确定你在做什么。即使在那时,也许有更安全,更好的方式来实现你正在尝试的任何东西。

另外,为什么要使用单个元素创建char数组?这对我来说似乎很奇怪。