对于struct
typedef struct sharedData
{
sem_t *forks;
}sharedData;
当我尝试这样做时,我会得到一个警告:
sharedData sd;
sem_t forks[5];
sd.forks = &forks; // Warning: assignment from incompatible pointer type
我是误会还是遗漏了什么?
最佳答案
问题是&forks
有类型
sem_t (*)[5]
也就是说,指向5个
sem_t
s数组的指针。编译器警告是因为sd.forks
具有类型sem_t*
,并且两个指针类型不能相互转换。要解决这个问题,只需将赋值更改为
sd.forks = forks;
由于c的指针/数组的可互换性,此代码将按预期工作。这是因为
forks
将被视为&forks[0]
,它确实具有sem_t *
类型。