我需要这样的东西
const char **nodeNames[] =
{
{"RootNode", "Reference", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Hips", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Heviest", "Node_1", "Node_2", "Node_3"},
};
但是在之前的声明中,我收到了一个错误。
我怎样才能在代码中引用它?
答案 0 :(得分:3)
看起来你想要一个const char*
的二维数组:
const char *nodeNames[][5] =
{ // ^^ this dimension can be deduced by the compiler, the rest not
{"RootNode", "Reference", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Hips", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Heviest", "Node_1", "Node_2", "Node_3"}
};
请注意,您需要明确指定除主要尺寸之外的所有尺寸。
这与字符的3D数组完全不同,因为字符串的大小不同。我相信您已经意识到这一点,并且您不会例如取消引用nodeNames[0][2][7]
,这将超出"Node_1"
的结尾。
答案 1 :(得分:2)
取决于你想要的东西。这将为您提供一个2D数组字符串:
const char *nodeNames[][20] =
{
{"RootNode", "Reference", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Hips", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Heviest", "Node_1", "Node_2", "Node_3"},
};
这将为您提供一个指向字符串数组的指针数组。
const char *node1[] = {"RootNode", "Reference", "Node_1", "Node_2", "Node_3"};
const char *node2[] = {"RootNode", "Hips", "Node_1", "Node_2", "Node_3"};
const char *node3[] = {"RootNode", "Heviest", "Node_1", "Node_2", "Node_3"};
const char **nodeNames2[] =
{
node1,
node2,
node3,
};
请注意,两者略有不同,因为第一个存储在数组中(因此存在一个连续存储3 * 20个指向字符串的指针),其中第二个只将地址存储到第一个指针中。指针数组,反过来又指向字符串。没有连续的存储,只有三个指针。
在这两种情况下,指针可以是相同的值,因为三个实例"Node_1"
可以由单个字符串表示。
对于正确的char数组:
const char nodeNames3[3][5][12] =
{
{"RootNode", "Reference", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Hips", "Node_1", "Node_2", "Node_3"},
{"RootNode", "Heviest", "Node_1", "Node_2", "Node_3"},
};
将所有字符存储在连续内存中,即3 * 5 * 12字节。