对于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_ts数组的指针。编译器警告是因为sd.forks具有类型sem_t*,并且两个指针类型不能相互转换。
要解决这个问题,只需将赋值更改为
sd.forks = forks;

由于c的指针/数组的可互换性,此代码将按预期工作。这是因为forks将被视为&forks[0],它确实具有sem_t *类型。

08-17 04:12