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

次の 2 次元配列が必要なようです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

あなたが望むものに少し依存します。これにより、文字列の 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,
};

2 つが微妙に異なることに注意してください。1 つ目は配列内に格納されます (したがって、文字列への 3 * 20 ポインターの連続したストレージがあります)。2 つ目は、ポインターの配列内の最初のポインターへのアドレスのみを格納します。であり、文字列を指します。連続したストレージはなく、3 つのポインターのみです。

"Node_1"どちらの場合も、3 つのインスタンスが 1 つの文字列で表される可能性があるため、ポインターは同じ値である可能性があります。

char の適切な 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 に答える