0

我需要这样的东西

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"},
};

但在之前的声明中,我得到了一个错误。

我如何在代码中引用它?

4

2 回答 2

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".

于 2013-05-30T12:52:42.910 回答
2

取决于你想要什么。这将为您提供一个二维字符串数组:

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"可能由单个字符串表示。

对于正确的 3D 字符数组:

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 字节。

于 2013-05-30T12:57:21.273 回答