мне нужно что-то вроде этого
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*
:
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"}
};
Обратите внимание, что вам нужно явно указать все, кроме размера основного измерения.
Это не ведет себя точно так же, как трехмерный массив символов, потому что ваши строки имеют разный размер. Я надеюсь, что вы знаете об этом, и вы не будете, например, разыменование nodeNames[0][2][7]
, который бы выходил за пределы конца "Node_1"
,
Зависит немного от того, что вы хотите. Это даст вам 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"
может быть представлен одной строкой.
Для правильного трехмерного массива символов:
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 байтов.