Самый простой способ определить strArray
в соответствии с запросом - сделать его массивом указателей на (первые элементы) массивов в myStructure
:
char *strArray[] = { myStructure.str00, myStructure.str01, myStructure.str03, myStructure.Str04, … };
С этим определением strArray[i]
инициализируется соответствующим членом структуры, таким как myStructure.str01
. Обратите внимание, что myStructure.str01
будет автоматически преобразован в указатель на его первый элемент, поэтому strArray[i]
является указателем на первый char
в одном из массивов.
Тогда strArray[i][j]
равно char
j
массива i
.
(Кстати, вы пропускаете str02
в своем примере кода. Я не знаю почему, но сохранил это в коде выше.)
Альтернативным методом будет использование объединения, которое может быть выполнено различными способами, одним из которых является:
struct
{
int id;
union
{
struct
{
char str00[10];
char str01[10];
char str03[10];
char str04[10];
...
};
char strArray[number of arrays][10];
};
} myStructure;
Это, как правило, плохой дизайн, так как он излишне запутывает. (В то время как это имеет техническую вероятность сбоя из-за заполнения между индивидуально определенными массивами, утверждения могут использоваться, чтобы гарантировать, что это не происходит, или, скорее, чтобы определить, когда это происходит.)
Чаще всего мы просто определяем строки как массив массивов:
struct
{
int id;
char str[number of arrays][10];
} my Structure;
Тогда члены всегда будут указываться по индексу, например myStructure.str[1]
, а не по отдельным именам, таким как myStructure.str01
.