【问题标题】:Warning about assignment from incompatible pointer type when using pointers and arrays?使用指针和数组时来自不兼容指针类型的赋值警告?
【发布时间】:2011-06-21 04:12:05
【问题描述】:

对于struct

typedef struct sharedData
{
    sem_t *forks;
}sharedData;

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

sharedData sd;
sem_t forks[5];
sd.forks = &forks; // Warning: assignment from incompatible pointer type

我是不是误会或遗漏了什么?

【问题讨论】:

    标签: c arrays pointers struct warnings


    【解决方案1】:

    问题是&forks 有类型

    sem_t (*)[5]
    

    即指向五个sem_ts 的数组的指针。编译器警告是因为sd.forks 的类型为sem_t*,并且这两种指针类型不能相互转换。

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

    sd.forks = forks;
    

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

    【讨论】:

      【解决方案2】:

      上面是一个很好的解释,但请记住

      sd.forks = forks;
      

      和……一样

      sd.forks = &forks[0];
      

      为了清晰起见,我喜欢第二个。如果您希望指针指向第三个元素...

      sd.forks = &forks[2];
      

      【讨论】:

        猜你喜欢
        • 2013-06-21
        • 1970-01-01
        • 2016-09-16
        • 2019-08-09
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多