首页 > 解决方案 > 关于用数组分配指针变量的 GCC 警告?

问题描述

代码片段:

int *c[2] = {{1,2,3}, {4,5,6}};

发出警告:

warning: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'
      [-Wint-conversion]
    int *c[2] = {{1,2,3}, {4,5,6}};
                  ^
warning: excess elements in scalar initializer
    int *c[2] = {{1,2,3}, {4,5,6}};
                    ^

我想数组{1,2,3}会衰减为指针,所以分配是合法的?

此外,根据警告,为什么编译器认为我试图分配intint *?而不是int array typeto int *? 提前致谢!

标签: carrays

解决方案


带括号的初始值设定项不是数组,因此不能衰减为指针类型。并且因为c是 的数组int *,所以每个初始化程序都需要属于该类型。嵌套初始化器仅适用于实际数组(不是指针)或结构。

但是,您可以做的是在具有数组类型的初始化程序中使用复合文字。

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

推荐阅读