title: How do I cast a void pointer to a struct in C?
body: <p>In a project I'm writing code for, I have a void pointer, "implementation", which is a member of a "Hash_map" struct, and points to an "Array_hash_map" struct. The concepts behind this project are not very realistic, but bear with me. The specifications of the project ask that I cast the void pointer "implementation" to an "Array_hash_map" before I can use it in any functions. </p>
  
  <p><strong>My question, specifically is, what do I do in the functions to cast the void pointers to the desired struct? Is there one statement at the top of each function that casts them or do I make the cast every time I use "implementation"?</strong></p>
  
  <p>Here are the typedefs the structs of a Hash_map and Array_hash_map as well as a couple functions making use of them. </p>
  
  <pre><code>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;
  </code></pre>
  
  <p>functions:</p>
  
  <pre><code>/* 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 &lt; map-&gt;implementation-&gt;size; i++){
      if (map-&gt;key_compare_fn(map-&gt;implementation-&gt;array[i].key, key) == 0){
        *value = map-&gt;implementation-&gt;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-&gt;capacity;
  }
  </code></pre>