Что происходит в строке кода
const ProbabilityTable a = *(ProbabilityTable*)elem1
в следующей функции:
struct ProbabilityTable {
unsigned char symb;
double prob; };
static int ProbabTableComp(const void *elem1, const void *elem2){ // метод сравнения для qsort
const ProbabilityTable a = *(ProbabilityTable*)elem1;
const ProbabilityTable b = *(ProbabilityTable*)elem2;
if (a.prob < b.prob)
return 1;
else if (a.prob > b.prob)
return -1;
else
return 0; }
const ProbabilityTable a = *(ProbabilityTable*)elem1;
В elem1 находится адрес некоторого места в памяти, которое мы хотим, рассматривая его как переменную типа ProbabilityTable, инициализировать ею константу a.
Поскольку у нас есть только адрес, выполняя приведение (ProbabilityTable*)elem1, мы получаем указатель на ProbabilityTable. Чтобы получить само значение, необходимо этот указатель разыменовать с помощью оператора *, что и делается в рассматриваемой строке. Ну, а дальше это значение копируется в a...
Кстати, я бы не копировал эти значения, а сравнение выполнял, обращаясь непосредственно к местам в памяти. Если структуры большие, копирование может повлиять на производительность...
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости