В проекте, над которым я пишу код, у меня есть указатель на пустоту, «реализация», который является членом структуры «Hash_map» и указывает на структуру «Array_hash_map». Концепции этого проекта не очень реалистичны, но несут меня. Спецификации проекта требуют, чтобы я применил указатель void «реализация» к «Array_hash_map», прежде чем я смогу использовать его в любых функциях.Как мне указать указатель void на struct в C?
Мой вопрос, в частности, что мне делать в функциях, чтобы отличать указатели void к желаемой структуре? Есть ли один оператор в верхней части каждой функции, которая их бросает, или я делаю приведение каждый раз, когда я использую «реализацию»?
Ниже перечислены структуры struct Hash_map и Array_hash_map, а также функции пары, использующие их.
typedef struct {
Key_compare_fn key_compare_fn;
Key_delete_fn key_delete_fn;
Data_compare_fn data_compare_fn;
Data_delete_fn data_delete_fn;
void *implementation;
} Hash_map;
typedef struct Array_hash_map{
struct Unit *array;
int size;
int capacity;
} Array_hash_map;
typedef struct Unit{
Key key;
Data data;
} Unit;
функции:
/* Sets the value parameter to the value associated with the
key parameter in the Hash_map. */
int get(Hash_map *map, Key key, Data *value){
int i;
if (map == NULL || value == NULL)
return 0;
for (i = 0; i < map->implementation->size; i++){
if (map->key_compare_fn(map->implementation->array[i].key, key) == 0){
*value = map->implementation->array[i].data;
return 1;
}
}
return 0;
}
/* Returns the number of values that can be stored in the Hash_map, since it is
represented by an array. */
int current_capacity(Hash_map map){
return map.implementation->capacity;
}
Является ли это домашнее задание? – bta
своего рода, это небольшая часть большого проекта, над которым я работаю – Rowhawn