想象一下这个高度人为的示例:(请注意,这是针对Arduino风格的C,而不是ANSI C):
typedef struct _node {
int value;
struct _node *next;
} node;
使用此功能,我可以通过构建“向后”列表来构建两个节点的链表:
node nodeB = { 2, (node *)0 }; // end of list
node nodeA = { 1, &nodeB }; // A.next => B
但是,如果要创建一个循环链接列表,该怎么办?这行不通:
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };
因为在nodeA要引用它时未声明nodeB。
我可以在运行时构建链接列表(动态分配节点,然后设置
next
链接)。但是有没有办法在编译时获得有效的前向声明? 最佳答案
这看起来像一个非常普通的情况,前向声明将起作用:
extern node nodeB;
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };