C++ 允许您拥有指向不完整类型的指针。 struct node *dest
就是这样的野兽。您有对 的前向引用struct node
,但由于您只是声明了一个指向该类型的指针,编译器并不介意。这是明确允许的,它允许构建相互引用的结构。
如果您需要两个在 C++ 中相互引用的类或结构,但不想在声明中使用struct
orclass
关键字,则可以进行试探性声明:
struct node; // Incomplete type, but makes `node` known to compiler as a struct.
struct adjacency; // Incomplete type, but makes `adjacency` known to compiler as a struct.
struct adjacency
{
node *dest;
adjacency *link;
};
struct node
{
char nodename;
node *next;
adjacency *adj;
};
风格指南:将 * 放在变量名旁边,而不是类型。这就是编译器看到它的方式,它会在你以后编写类似的东西时避免你的困惑struct node* next, prev;
,并想知道为什么prev
不是指针。惯用的写法是struct node *next, *prev;
.