Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用指针和数组时,有关不兼容指针类型的赋值的警告?_C_Arrays_Pointers_Struct_Warnings - Fatal编程技术网

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];