2011-10-19 56 views
2

我是新来的C,我不能弄清楚,为什么我收到初始化不相容poniter型warning.The代码的相关部分:编译器警告:初始化兼容的指针类型

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

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

将一个指向这个对象的指针传递给这些函数,并且你的改变将会持续在它们之外。他们没有这样做的原因是因为你是通过价值传递了对象。

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

+0

上述两者都会导致分段错误。是否因为有些街区没有搭配? – Catie

+0

@Catie:你有没有分配数组中的每个'B'? –

相关问题