Следующий фрагмент кода взят из K&R Глава 5-11: Указатели на функции:
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void *, void *)(numeric ? numcmp : strcmp));
Я могу скомпилировать/запустить код с помощью (void*)
, так почему вместо этого lineptr использует (void **)
? Есть ли какие-то внутренние различия между двумя приведениями или это больше для удобочитаемости? Является ли (void *)
приведением только к массиву, тогда как (void **)
приводит как к массиву, так и к сохраненным указателям?
Я понимаю, что **lineptr
эквивалентно *lineptr[]
, и причина приведения типа void заключается в том, чтобы осчастливить компилятор.
(void **)
, но приведение(void *)
выполняется только к массиву? - person Kevin   schedule 27.12.2014void**
. - person haccks   schedule 27.12.2014