节点结构调用自身

Node struct calling itself

本文关键字:调用 结构 节点      更新时间:2023-10-16

以下代码片段可以编译:

struct node
{
    node * a; node * b; int count; 
    node (node * aa, node * bb, int count2){a=aa;b=bb;count=count2;}
};

我想知道为什么C++允许指向节点结构内部节点的指针(也可以是节点本身......因为您可以取消引用它),而不是实际的节点..如下所示的东西无法编译:

struct node
{
    node a; node b; int count; 
    node (node aa, node bb, int count2){a=aa;b=bb;count=count2;}
};

此外,在我的代码后面,我尝试通过以下方式声明节点:

node x=new node (NULL, NULL, 0); 

显然,我需要让它像这样:

node * x=new node (NULL, NULL, 0); 

我不明白这一点.. 为什么需要声明 x 作为指针?

考虑尝试为您的结构分配足够的内存。如果结构内部有node,那么节点有多大?这是一个int2 * sizeof(node)的大小。但是node ???有多大它是递归的,并且无法使类的成员A类型为A。这就像说一个人是由一个头、一只胳膊、两条腿和一个人组成的。这根本说不通。

另一方面,指针总是某个设置大小(通常为 4 或 8 个字节)。那么node有多大呢?这是sizeof(int) + 2*sizeof(node*).

至于你的第二个问题,这就是new在C++的工作方式。它返回指向已分配对象的指针。

似乎您是在有一些Java背景的情况下进入这个问题的?在 Java 中,指针不向程序员公开。new 关键字返回一个引用,您可以让看似类的成员A成为A。但这只有效,因为 Java 中的对象实例成员实际上是引用,而不是对象本身。