使用指针和数组时有关从不兼容的指针类型进行赋值的警告?

ran*_*ght 4 c arrays struct warnings pointers

为了 struct

typedef struct sharedData
{
    sem_t *forks;
}sharedData;
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时,我收到警告:

sharedData sd;
sem_t forks[5];
sd.forks = &forks; // Warning: assignment from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

我误解或遗漏了什么吗?

tem*_*def 11

问题是&forks有类型

sem_t (*)[5]
Run Code Online (Sandbox Code Playgroud)

也就是说,指向五个数组的指针sem_t.编译器警告是因为sd.forks有类型sem_t*,并且两个指针类型不能相互转换.

要解决此问题,只需将分配更改为

sd.forks = forks;
Run Code Online (Sandbox Code Playgroud)

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