【发布时间】:2021-07-10 22:13:58
【问题描述】:
我正在尝试在 C 中实现一个链表。我尝试了以下实现:
// Attempt 1
typedef struct
{
Node *next;
Node *prev;
} Node;
// Attempt 2
typedef struct
{
struct Node *next;
struct Node *prev;
} Node;
第一个版本给了我错误:unknown type name 'Node'
第二个编译但给出警告:assignment to 'struct Node *' from incompatible pointer type 'Node *' {aka 'struct <anonymous> *'} 当我这样使用它时
void link(Node * node) {
node->next = (Node) {node, NULL}
}
【问题讨论】:
-
(Node) {node, NULL}应该是(Node*)&{node, NULL},因为next是一个指针。 -
将您的
Attempt 2更改为typedef struct Node {...} Node; -
但是,这将是无效的,因为复合字面量返回一个指向本地数据的指针。
-
尤金什。说或者你也可以做
typedef struct Node; struct Node { Node *next,*prev; };
标签: c struct linked-list declaration typedef