Как qsort массив указателей на символ в C?

Предположим, у меня есть массив указателей на char в C:

char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };

И я хочу отсортировать этот массив с помощью qsort:

qsort(data, 5, sizeof(char *), compare_function);

Я не могу придумать функцию сравнения. По какой-то причине это не работает:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = (const char *)name1;
    const char *name2_ = (const char *)name2;
    return strcmp(name1_, name2_);
}

Я много искал и обнаружил, что мне пришлось использовать** внутри qsort:

int compare_function(const void *name1, const void *name2)
{
    const char *name1_ = *(const char **)name1;
    const char *name2_ = *(const char **)name2;
    return strcmp(name1_, name2_);
}

И это работает.

Может ли кто-нибудь объяснить использование*(const char **)name1 в этой функции? Я совсем не понимаю. Почему двойной указатель? Почему моя оригинальная функция не сработала?

Спасибо, Бода Кидо.