以下数组初始化程序:
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
帮我解决这个问题吗?
答案 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__所示。