Я читаю 6.3-й абзац второго выпуска «C-программирования», автор Kernigan & Ritchie.NULL указатель как маркер конца массива
Некоторые структуры:
struct key {
char *word;
int count;
} keytab[NKEYS] {
{ "auto", 0 },
{ "break", 0 },
{ "case", 0 },
{ "char", 0 },
{ "const", 0 },
{ "continue", 0 }
};
Авторы писали о нем:
Количество NKEYS является количество ключевых слов в Keytab. Хотя мы с можем считать это вручную, это намного проще и безопаснее сделать это с помощью машины , особенно, если список подлежит изменению. Одной из возможностей было бы прервать список инициализаторов с нулевым указателем, , затем выполнить цикл по keytab до тех пор, пока не будет найден конец.
Все было бы понятно, если перечисление содержал только указатели:
struct key {
char *word;
char *description;
} keytab[NKEYS] {
{ "auto", "" },
{ "break", "" },
{ "case", "" },
{ "char", "" },
{ "const", "" },
{ "continue", "" }
{ NULL, NULL}
};
Но каждая запись не только указатель, но и int
тоже. Если я прав, поймите авторов, то последняя запись должна быть следующей:
{ NULL, ? }
Как насчет не указателей?
Как я могу решить это для перечислений, которые не содержат указателей? Например:
enum myEnum {
int index;
inr count;
double value;
} myVariable[] {
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0},
{?,?,?}
};
Спасибо.
Да, я это понимаю. –