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

我是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]时,它也正常工作。 但是,使用此解决方案不会保留在function之外的function所做的更改。

请指教。

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

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

AB不是类型,而是struct astruct b实例。 也许你想使用经典的C语言,但你缺少一个typedef

 typedef struct a { ... } A; 

现在struct aA是一回事。

在你的最后一个代码片段中, (*b_list)[6].color实际应该是(*b_list[6]).color或者更好b_list[6]->color