Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
1

Хэш Функция с параметром "Void"

12.11.2013, 20:05. Просмотров 609. Ответов 4
Метки нет (Все метки)

Всем привет,

у меня такой вопрос, нужно написать хэш-функцию по прототипу

Код
unsigned long hash(const void * value);
Так как параметр поинтер типа "void", передаваться могут и цифры и строки и пр., а значит нужен совершенно разный к ним подход или возможно есть универсальное решение?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 20:05
Ответы с готовыми решениями:

Сортировка подсчетом и ошибка "Невозможно преобразовать "void*" в "int*"
Мне нужно отсортировать одномерный массив с помощью алгоритма сортировки, однако возникает ошибка...

Ошибка в переменных: Невозможно преобразовать "void *" в "int **"
после компиляции выдает ошибку: error C2440: =: невозможно преобразовать "void *" в "int **" 1> ...

Функция замены ":" на "_" в названии файла и ошибка "undefined reference to 'strcat'"
Добрый день,прошу помочь мне с такой проблемой: В общем есть функция,работающая с именем...

Функция void delete". Требуется идентификатор
В общем, ругается на функцию void delete, не понимаю почему. Помогите исправить. #include...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость",...

4
sharpey
373 / 163 / 37
Регистрация: 21.09.2008
Сообщений: 547
15.11.2013, 09:06 2
Добавить второй уточняющий параметр можно в прототип функции? Например, типа enum.
0
anmartex
...
1788 / 1256 / 931
Регистрация: 12.02.2013
Сообщений: 2,056
15.11.2013, 09:36 3
Fonduee, а вы посмотрите на ту же функцию memset. В вашем случае заполнять ничем не надо, поэтому остаётся 2 параметра: указатель на буфер и размер в байтах.
1
Evg
Эксперт CАвтор FAQ
20424 / 7944 / 615
Регистрация: 30.03.2009
Сообщений: 22,106
Записей в блоге: 30
15.11.2013, 16:43 4
Смотря что у тебя выступает в качестве ключа: значение объекта, или адрес. Если адрес, то ничего делать не надо. Если значение, то более правильно написать несколько функций для разных типов значений
1
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
15.11.2013, 22:41  [ТС] 5
Взял сею функцию, работает со стрингами, с цифрами есть проблемы, но для моих целей всё в рамках.

Код
    unsigned long hash = 49613;
    int c;
    while ((c = *(char *) value++)) {
        hash = ((hash << 5) + hash) + c;
    }
    return hash;
П.С. Можно было бы передавать также размер в байтах, как это было посоветовано выше, но нужно работать с тем, что дали.
0
15.11.2013, 22:41
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2013, 22:41

Компилятор выдает ошибку "expected expression before ‘void’" - почему?
void foo(void (*callback)()){ нечто(); callback(); еще_одно_нечто(); } а в майне: foo(void...

Expected constructor, destructor, or type conversion before "void"
Народ. Привет всем. Проблема такая...есть текст программы на С. Вот ее начальный кусок: #include...

Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие"
Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ. Составить и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.