Что происходит в строке кода
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
...
Кстати, я бы не копировал эти значения, а сравнение выполнял, обращаясь непосредственно к местам в памяти. Если структуры большие, копирование может повлиять на производительность...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пустой консольный проект студии 2017, с настройками по умолчанию, кроме Platform Toolset: v141_xp, с таким кодом:
Существует следующий класс:
Не могу нигде найти, как сделать,чтобы можно было вводить время через ":"К примеру, 09:45