编译器警告:初始化不兼容的指针类型

时间:2011-10-19 18:03:50

标签: c

我是C的新手,我无法弄明白,为什么我会得到初始化不兼容的poniter类型警告。代码的相关部分是:

struct a {
  int address;
  B * apples[8];
} A;

struct b {
  int color;
} B;

我有一个名为a_list的A数组。我目前正在做的是:

B *b_list = a_list[i].apples;   // i being an index in for loop
b_list[6].color = 0;

以上工作正常,但会发出警告:

  Initialization from incompatible pointer type. 

为了解决这个问题,我的理由是我应该做

B ** b_list = a_list[i].apples;  // as it is pointer to pointer. 
So now b_list basically points to a pointer which points to an array of 6, yea?
So: (*b_list)[6].color          // However this causes segmentation fault.

当结构A有B苹果[8]而不是B *苹果[8]时,它也正常工作。但是,使用此解决方案不会保留在函数之外的函数所做的更改。

请建议。

2 个答案:

答案 0 :(得分:1)

AB不是类型,而是struct astruct b的实例。也许你想使用经典的C语言,但你错过了typedef

typedef struct a {
    ...
} A;

现在struct aA是一回事。

在上一段代码段中,(*b_list)[6].color实际应为(*b_list[6]).color或更好b_list[6]->color

答案 1 :(得分:0)

  

当结构A有B个苹果时,它也正常工作[8],   而不是B *苹果[8]。但是,使用此解决方案则不然   保持功能在他们所在位置之外所做的更改   制成。

将指向对象的指针传递给此类函数,您的更改将在其外部保留。他们没有的原因是因为你按价值传递了对象。