我是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]时,它也正常工作。但是,使用此解决方案不会保留在函数之外的函数所做的更改。
请建议。
答案 0 :(得分:1)
A
和B
不是类型,而是struct a
和struct b
的实例。也许你想使用经典的C语言,但你错过了typedef
:
typedef struct a {
...
} A;
现在struct a
和A
是一回事。
在上一段代码段中,(*b_list)[6].color
实际应为(*b_list[6]).color
或更好b_list[6]->color
。
答案 1 :(得分:0)
当结构A有B个苹果时,它也正常工作[8], 而不是B *苹果[8]。但是,使用此解决方案则不然 保持功能在他们所在位置之外所做的更改 制成。
将指向对象的指针传递给此类函数,您的更改将在其外部保留。他们没有的原因是因为你按价值传递了对象。