#include
#include
#include
cấu trúc typedef dict_pair {
phím void *;
void *giá trị;
struct dict_pair *đuôi;
} lệnh;
dict* NewDictionary(void) {
dict *dictionary = malloc(sizeof(dict)); // hoặc chúng ta có thể malloc(sizeof(struct dict_pair))
từ điển->đuôi = NULL;
}
// hoạt động chính tả
void put(dict *dictionary, void *key, void *value) {
//cặp mới
dict *new_pair = malloc(sizeof(dict));
new_pair->key = key;
new_pair->value = giá trị;
// xâu chuỗi
new_pair->tail = NULL;
dict *last_node = từ điển;
while (last_node->tail != NULL) {
Last_node = Last_node->tail;
}
Last_node->tail = new_pair;
}
void* get(dict *dictionary, void *key) {
dict *current_dict = từ điển;
trong khi (1) {
if (current_dict->key == key) {
trả về giá trị current_dict->value;
}
khác nếu (từ điển->đuôi != NULL) {
current_dict = current_dict->tail;
} khác phá vỡ;
}
trả về NULL;
}
//kết thúc thao tác
int chính(void) {
dict *dictionary = NewDictionary();
put(dictionary,(void *) "buffer1",(void *) "Fake1");
put(dictionary,(void *) "buffer2",(void *) "Fake2");
put(dictionary,(void *) "key",(void *) "Đây là giá trị.");
char *result = (char *) get(dictionary, (void *) "key");
printf("%s\n",kết quả);
}
Vì vậy, tôi đã viết được đoạn mã trên để triển khai một từ điển. Mặc dù tôi có thể viết mã và biên dịch nó và làm cho nó hoạt động như mong đợi nhưng có một số điều tôi chưa hiểu rõ. Chủ yếu về con trỏ:
dict *current_dict = từ điển;
Hãy lấy dòng này làm ví dụ. Chúng ta đang khai báo một biến chứa kiểu dict. current_dict là một con trỏ phải không? Từ điển là một con trỏ. Tuy nhiên, *current_dict không phải là con trỏ, làm cách nào để gán nó cho con trỏ?
Hay phải gõ rõ ràng mới báo lỗi?
dict (*current_dict) = từ điển;
Nếu vậy, điều này có nghĩa là dòng trên có nghĩa là chúng ta đang khai báo một biến dict có kiểu current_dict là một con trỏ. Tuyên bố này không phải
(dict*) current_dict = từ điển;
Như bạn có thể thấy, khoảng cách và vị trí làm tôi bối rối.
Có ai có thể giúp giải thích sự khác biệt giữa * định vị không?
Cảm ơn!
虽然 dict * từ điển
Và dict* từ điển
Có cùng ý nghĩa trong C, nhưng tôi thích cái trước hơn.
Tôi thích nghĩ về các khai báo con trỏ theo các thuật ngữ sau:
int x; // x là một int
int *y; // *y là một int
int **z; //**z là một int
nếu bạn vẫn còn nhớ *y
Đúng y
thì đối tượng được chỉ tới y
Phải là một con trỏ tới - một số nguyên. như nhau,z
Phải là một con trỏ tới int.
Tôi là một lập trình viên xuất sắc, rất giỏi!