Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何声明和初始化二维字符串数组?_C++_Multidimensional Array_Declaration_C Strings - Fatal编程技术网

C++ 如何声明和初始化二维字符串数组?

C++ 如何声明和初始化二维字符串数组?,c++,multidimensional-array,declaration,c-strings,C++,Multidimensional Array,Declaration,C Strings,我需要这样的东西 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"}, }; 但是在前面的声明中,我得到了一个错误 我如何在代码中引用它呢?

我需要这样的东西

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"},
};
但是在前面的声明中,我得到了一个错误


我如何在代码中引用它呢?

看起来您需要一个二维数组
常量字符*

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字符数组的行为不同,因为字符串的大小不尽相同。我相信您已经意识到了这一点,例如,您不会取消引用
节点名称[0][2][7]
,这将超出
“Node_1”

的末尾,看起来您需要一个二维数组
常量字符*

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字符数组的行为不同,因为字符串的大小不尽相同。我相信您已经意识到了这一点,例如,您不会取消对
节点名称[0][2][7]
的引用,这将超出
“Node_1”

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

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

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

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