#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dict_pair {
void *key;
void *value;
struct dict_pair *tail;
} dict;
dict* NewDictionary(void) {
dict *dictionary = malloc(sizeof(dict)); //or we can malloc(sizeof(struct dict_pair))
dictionary->tail = NULL;
}
//dict operations
void put(dict *dictionary, void *key, void *value) {
//new pair
dict *new_pair = malloc(sizeof(dict));
new_pair->key = key;
new_pair->value = value;
//chaining
new_pair->tail = NULL;
dict *last_node = dictionary;
while (last_node->tail != NULL) {
last_node = last_node->tail;
}
last_node->tail = new_pair;
}
void* get(dict *dictionary, void *key) {
dict *current_dict = dictionary;
while (1) {
if (current_dict->key == key) {
return current_dict->value;
}
else if (dictionary->tail != NULL) {
current_dict = current_dict->tail;
} else break;
}
return NULL;
}
//end operations
int main(void) {
dict *dictionary = NewDictionary();
put(dictionary,(void *) "buffer1",(void *) "Fake1");
put(dictionary,(void *) "buffer2",(void *) "Fake2");
put(dictionary,(void *) "key",(void *) "This is the value.");
char *result = (char *) get(dictionary, (void *) "key");
printf("%s\n",result);
}
Итак, мне удалось написать приведенный выше код для реализации словаря. Хотя я смог написать код, скомпилировать и заставить его работать ожидаемым образом, есть некоторые вещи, которые мне не совсем понятны. В основном касательно указателей:
dict *current_dict = dictionary;
Давайте возьмем эту строку, например. Мы объявляем переменную, которая содержит тип dict. current_dict - это указатель, верно? а словарь это указатель. Однако * current_dict не является указателем, как его можно назначить указателю?
Или я должен явно напечатать это, чтобы сделать это ошибкой?
dict (*current_dict) = dictionary;
Если это так, то означает ли это, что приведенная выше строка означает, что мы объявляем переменную current_dict с типом dict, а это указатель. Разве это объявление не будет
(dict*) current_dict = dictionary;
Как видите, интервал и расположение сбивают меня с толку.
Может ли кто-нибудь помочь объяснить разницу в * расположении?
Спасибо!