我正在尝试用 C 实现一个链表,但我遇到了以下问题。我的节点定义如下:
struct node_t {
void* element;
node_t* previous;
node_t* next;
};
struct linkedlist_t {
node_t* head;
node_t* tail;
int length;
};
从链表中获取元素的方法具有以下签名:
// Gets an element from a linked list.
int linkedlist_get(linkedlist_t* linkedlist, unsigned int index, void* element);
因为我需要返回一个 int 来指示任何错误,所以我使用了一个 out 参数。但是,我不确定如何在方法内设置指针。我尝试这样做:
element = current->element; // The callee doesn't see it.
*((char*)element) = *((char*)current->element); // Copies only the first char
此外,我不想将元素从一个内存区域复制到另一个内存区域,我希望链表和被调用者都引用相同的内存区域。
你的get签名应该改成
int linkedlist_get(linkedlist_t* linkedlist, unsigned int index, void** element);
注意额外的*。然后在 get 例程中你可以做
*element = current->element;
哪个做你想要的。显然这是没有任何类型保护的旧式 C。小心你的内存处理。
我是一名优秀的程序员,十分优秀!