Pg 119 К & R показывает QSort написаны с указателями на функции:Указатель на код функции от K & R
if ((nlines = readlines(lineptr, MAXLINES)) >= 0)
qsort((void **) lineptr, 0, nlines -1,
(int (*)(void *, void *))(numeric ? numcmp : strcmp));
В этом коде lineptr отливается как указатель на указатель к мочеиспусканию. Это указатель на массив указателей на символы. Однако код можно также написать так:
qsort((void *) lineptr, 0, nlines-1,
и все еще работает отлично. Компилятор просто это выясняет? Зачем писать код так или иначе?
'qsort()' ожидает, что первым параметром будет '(void *)'. Я предполагаю, что компилятор называет '(void **)' back to '(void *)' неявно. –
Вы также используете объявление 'qsort' с этой страницы? –
Да, я использую объявление из pg 119 –