声明结构与自身?



我已经开始研究数据结构,链表弹出来了。链表背后的想法很简单,但实现(我使用 c++)有点令人困惑,尤其是关于链表中使用的节点。在C++中为单向链表定义节点的方式如下

// A linked list node 
struct Node { 
int data; 
struct Node* next; 
}; 

或者如果我们使用类,那么它是这样定义的。

class Node { 
public: 
int data; 
Node* next; 
}; 

我的困惑在这里出现。如何在结构节点中定义另一个具有相同名称的结构?我看到新结构是指向节点的指针,但是此实现实际上如何工作?这真的很令人困惑:(

如何在结构节点中定义另一个同名的结构?

这不是正在发生的事情。可以在数据成员声明中省略struct关键字struct Node* next;以便更容易理解:

struct Node { 
int data; 
Node* next; 
}; 

除了访问说明符(public),这现在与class版本相同,并且很明显,您没有在Node内部定义新的struct Node,而是声明一个数据成员next,它是指向类型Node实例的指针。64位机器上的指针需要64位,这就是为什么编译器可以使用Node的这个定义,因为它必须为Node实例保留的大小是已知的。

要声明指向某物的指针,您不需要定义类,只需要它的声明。因此,这不是递归定义,编译器不会遇到问题。

你可以这样想:无论指针的类型如何,指针成员的大小都相同,它仍然只需要寻址内存中任何位置的容量。

相关内容

  • 没有找到相关文章

最新更新