数组初始化时指针类型不兼容

时间:2019-05-11 13:27:34

标签: c arrays const

以下数组初始化程序:

const arr = Array.from(el.features.selectedOptions) //get array from selectedOptions property
const list = [] 
arr.forEach(item => list.push(item.value)) //push each item to empty array
console.log(list)

使const char** AST_NODE_TYPE_NAMES = { "AST_NODE_CONSTANT", "AST_NODE_BINARY", "AST_NODE_UNARY", "AST_NODE_VARIABLE", "AST_NODE_ASSIGNMENT", "AST_NODE_STATEMENTS", }; 发出以下警告:

gcc

帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您想要一个指针数组

const char *AST_NODE_TYPE_NAMES[] = {
    "AST_NODE_CONSTANT",
    "AST_NODE_BINARY",
    "AST_NODE_UNARY",
    "AST_NODE_VARIABLE",
    "AST_NODE_ASSIGNMENT",
    "AST_NODE_STATEMENTS",
};

该数组最终可以贴花到您想要的指针:

const char **foo1 = AST_NODE_TYPE_NAMES;
const char **foo = &AST_NODE_TYPE_NAMES[0];

您还可以使用复合文字(在这种情况下,它实际上是指针数组)来初始化该指针

const char** AST_NODE_TYPE_NAMES =(const char *[]) {
    "AST_NODE_CONSTANT",
    "AST_NODE_BINARY",
    "AST_NODE_UNARY",
    "AST_NODE_VARIABLE",
    "AST_NODE_ASSIGNMENT",
    "AST_NODE_STATEMENTS",
};

答案 1 :(得分:1)

指针不是集合,而是标量,它期望一个值对其进行初始化。在C语言中,也可以将标量初始化程序包装在{ }中!

因此:

const char** AST_NODE_TYPE_NAMES = {
     "AST_NODE_CONSTANT",
     "AST_NODE_BINARY",
     "AST_NODE_UNARY",
     "AST_NODE_VARIABLE",
     "AST_NODE_ASSIGNMENT",
     "AST_NODE_STATEMENTS",
};

尝试使用字符串常量"AST_NODE_CONSTANT"的第一个字符的地址来初始化指向const char的指针的 one 指针,但是它的类型不是const char **,而只是{ {1}}。除了 that 之外,还有 5个多余的初始化程序,即以下字符串。


您当然想要做的是初始化数组,如P__J__所示。