我是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所做的更改。
将指向对象的指针传递给这些函数,您的更改将在它们之外保留。 他们没有的原因是因为你按价值传递了对象。
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
。
以上就是c/c++开发分享编译器警告:初始化不兼容的指针类型相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562594.html