C 使用指针和数组时,有关不兼容指针类型的赋值的警告?
对于C 使用指针和数组时,有关不兼容指针类型的赋值的警告?,c,arrays,pointers,struct,warnings,C,Arrays,Pointers,Struct,Warnings,对于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] 也就是说,指向五个sem\ts的数组
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]
也就是说,指向五个sem\t
s的数组的指针。编译器警告是因为sd.forks
具有类型sem\u t*
,并且两个指针类型不能相互转换
要解决此问题,只需将分配更改为
sd.forks = forks;
由于C的指针/数组互换性,此代码将按预期工作。这是因为
forks
将被视为&forks[0]
,它确实具有类型sem\u t*
,上面是一个很好的解释,但请记住
sd.forks = forks;
和……一样
sd.forks = &forks[0];
为了清晰起见,我喜欢第二个。如果希望指针指向第三个元素
sd.forks = &forks[2];