C 编译器警告:初始化不兼容指针类型
我是C新手,我不明白为什么会出现初始化不兼容的poniter类型警告。代码的相关部分是:C 编译器警告:初始化不兼容指针类型,c,C,我是C新手,我不明白为什么会出现初始化不兼容的poniter类型警告。代码的相关部分是: struct a { int address; B * apples[8]; } A; struct b { int color; } B; 我有一个数组,叫做A_列表。我目前正在做的是: B *b_list = a_list[i].apples; // i being an index in for loop b_list[6].color = 0; 以上操作正常,但会引发警告:
struct a {
int address;
B * apples[8];
} A;
struct b {
int color;
} B;
我有一个数组,叫做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]时,它也能正常工作。但是,使用此解决方案不会保持在函数中所做更改的位置之外进行更改
请给我一些建议
当结构A有B苹果[8]时,它也能正常工作,
而不是B*苹果[8]。但是,使用此解决方案并不能
维护在功能中所做的更改,这些更改不在原来的位置
制造
向这些函数传递一个指向对象的指针,您的更改将在这些函数之外持久存在。他们没有这样做的原因是因为您按值传递对象。
A
和B
不是类型,而是结构A
和结构B
的实例。也许您想使用经典的C语言,但缺少了一个typedef
:
typedef struct a {
...
} A;
现在struct a
和a
是一回事
在您的上一个代码片段中,
(*b_list)[6]。颜色实际上应该是(*b_list[6])。颜色或者更好的是b_list[6]->颜色以上两者都会导致分段错误。是因为某些块没有被malloced吗?@Catie:您分配了数组中的每个B
s了吗?