在数组初始化期间从不兼容的指针类型进行初始化

时间:2018-11-05 13:16:46

标签: c arrays gcc

我有以下代码:

int main()
{
    int* abc[] ={
                    [3] = (&(int[3]){1,2,3}),
                    [2] = (&(int[2]){4,5})
                };
    printf("\n abc[3][1] = %d \n",abc[3][1]);
    return 0;
}

我正在尝试设置数组abc,以便该数组的特定索引指向另一个整数数组。

稍后,我将其修改为使用宏,以便在预处理过程中初始化数组,因此采用了这种方法。

代码工作正常,但我得到警告:

warning: initialization from incompatible pointer type

这是因为我的数组abc被声明指向整数,但实际上指向整数数组吗? 如何使该警告消失?

1 个答案:

答案 0 :(得分:3)

您在复合文字中使用的类型不正确。

数组的元素为int *,但使用&时,复合文字的类型为int (*)[3]int (*)[2]

应该是:

int* abc[] ={
                [3] = ((int[3]){1,2,3}),
                [2] = ((int[2]){4,5})
            };

现在int[3]int[2]都衰减到int *