【问题标题】:initialization from incompatible pointer type during array initialization在数组初始化期间从不兼容的指针类型初始化
【发布时间】:2018-11-05 13:16:45
【问题描述】:

我有以下代码:

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 被声明为指向整数,但它实际上指向的是整数数组? 我怎样才能让这个警告消失?

【问题讨论】:

  • FormatTry......

标签: c arrays gcc


【解决方案1】:

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

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

应该是:

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

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

【讨论】:

  • @dbush 我冒昧地编辑了一个澄清,希望你不介意。
  • @Lundin 没问题。谢谢。
  • 有什么方法可以在不知道子数组大小的情况下初始化abc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多