Wie kann ich warf einen void-Zeiger auf eine struct in C?

In einem Projekt, das ich bin das schreiben von code für, ich habe einen void-Zeiger, "Umsetzung", der ein Mitglied einer "Hash_map" Struktur und verweist auf eine "Array_hash_map" struct. Die Konzepte, die hinter diesem Projekt sind nicht sehr realistisch, aber Geduld mit mir. Die Spezifikationen des Projektes bitten, dass ich warf den void-Zeiger "Umsetzung" zu einer "Array_hash_map", bevor ich es verwenden kann, in der alle Funktionen.

Meine Frage speziell ist, was mache ich in den Funktionen cast von void-Zeiger an die gewünschte Struktur? Gibt es eine Anweisung am Anfang jeder Funktion, wirft Sie zu oder mache ich die Besetzung jedes mal, wenn ich "Umsetzung"?

Hier sind die typedefs die Strukturen einer Hash_map und Array_hash_map sowie ein paar Funktionen, die Sie nutzen.

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;

Funktionen:

/* 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;
}
  • Ist dieses Hausaufgaben?
  • Art, es ist ein kleiner Teil eines großen Projekts an dem ich arbeite
InformationsquelleAutor Rowhawn | 2010-05-03
Schreibe einen Kommentar