Как работает функция qsort()?

void qsort (
    void* base,
    size_t num,
    size_t size,
    int (*compar)(const void*,const void*)
);

Как функция qsort получает доступ к "размеру" байта после адреса, чтобы получить следующий элемент?
Типографская вставка void* в char*?

1 ответ

Как функция qsort получает доступ к "размеру" байтов после базового адреса, чтобы получить следующий элемент? Типографская вставка void* в char*?

Предположение, присущее этому вопросу, заключается в том, что qsort сам написан на C; это не должно быть. Давайте предположим, что это так.

Преобразование в char* было бы типичным способом сделать это, да, либо с помощью явного использования оператора приведения, либо путем назначения base к локальной переменной типа char*,

GNU C позволяет вам напрямую добавлять целое число в указатель void, но это непереносимое расширение языка Си.

Если у вас есть вопрос о конкретной реализации, скажите, что за реализация.

Другие вопросы по тегам