【问题标题】:Warning about assignment from incompatible pointer type when using pointers and arrays?使用指针和数组时来自不兼容指针类型的赋值警告?
【发布时间】:2011-06-21 04:12:05
【问题描述】:
对于struct
typedef struct sharedData
{
sem_t *forks;
}sharedData;
当我尝试这样做时收到警告:
sharedData sd;
sem_t forks[5];
sd.forks = &forks; // Warning: assignment from incompatible pointer type
我是不是误会或遗漏了什么?
【问题讨论】:
标签:
c
arrays
pointers
struct
warnings
【解决方案1】:
问题是&forks 有类型
sem_t (*)[5]
即指向五个sem_ts 的数组的指针。编译器警告是因为sd.forks 的类型为sem_t*,并且这两种指针类型不能相互转换。
要解决这个问题,只需将分配更改为
sd.forks = forks;
由于 C 的指针/数组可互换性,此代码将按预期工作。这是因为forks 将被视为&forks[0],它确实具有sem_t * 类型。
【解决方案2】:
上面是一个很好的解释,但请记住
sd.forks = forks;
和……一样
sd.forks = &forks[0];
为了清晰起见,我喜欢第二个。如果您希望指针指向第三个元素...
sd.forks = &forks[2];