Например, массив опций:
static struct option const long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {0, 0, 0, 0} };
Это для заполнения?
Посмотрите на справочную страницу для getopt_long():
getopt_long()
int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
Пара argc и argv показывает один из способов сказать, сколько записей в массиве (по явному количеству, хотя, начиная с argv[argc] == 0, там также находится страж). optstring обозначает короткие аргументы; longindex является выходным параметром. Это оставляет только указатель longopts, что означает, что функция должна быть в состоянии сказать, сколько записей в массиве без какого-либо вспомогательного счетчика (аргумент longoptcount отсутствует), поэтому конец массива отмечен всеми значениями ноль - дозорное значение.
argc
argv
argv[argc] == 0
optstring
longindex
longopts
longoptcount
Это «страж», поэтому код, обрабатывающий массив, знает, когда он будет достигнут.