Страница руководства библиотечной подпрограммы qsort(3)
дает пример сортировки слов, заданных в качестве аргументов в командной строке. Функция сравнения выглядит следующим образом:
static int
cmpstringp(const void *p1, const void *p2)
{
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
Но здесь сортируются элементы argv
. Теперь argv
- это указатель на указатели символов, который также можно рассматривать как таблицу указателей на символы.
Следовательно, его элементы являются указателями на символы, поэтому не должны ли фактические аргументы cmpstringp
быть указателями на символы, а не "указателями на указатели на символы"?