Dans un projet pour lequel j'écris du code, j'ai un pointeur vide, "implementation", qui est membre d'une structure "Hash_map", et pointe vers une structure "Array_hash_map". Les concepts derrière ce projet ne sont pas très réalistes, mais supporter avec moi. Les spécifications du projet demandent que je jette le pointeur vide "implementation" à un "Array_hash_map" avant de pouvoir l'utiliser dans n'importe quelle fonction.Comment est-ce que je lance un pointeur vide à une structure dans C?
Ma question, spécifiquement est, que dois-je faire dans les fonctions pour lancer les pointeurs de vide à la structure souhaitée? Y a-t-il une déclaration en haut de chaque fonction qui les projette ou est-ce que je fais la distribution chaque fois que j'utilise "implementation"?
Voici les typedefs les structures d'un Hash_map et Array_hash_map ainsi que quelques fonctions les utilisant.
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;
fonctions:
/* 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;
}
Est-ce devoir? – bta
en quelque sorte, c'est une petite partie d'un grand projet sur lequel je travaille – Rowhawn