在我正在編寫代碼的項目中,我有一個void指針,「實現」,它是「Hash_map」結構的成員,並指向「Array_hash_map」結構。這個項目背後的概念不是很現實,但忍受着我。該項目的規範要求我將void指針「implementation」投射到「Array_hash_map」,然後才能在任何函數中使用它。如何將一個void指針轉換爲C中的結構體?
我的問題,具體是,我該怎麼做的功能來將空指針投射到所需的結構?每個函數的頂部是否有一個聲明會投射它們,或者每次使用「實現」時都會進行投射?
這裏是typedef 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 2010-05-04 00:01:52
有點,這是我正在研究的一個大型項目的一小部分 – Rowhawn 2010-05-04 00:02:41