节点结构调用自身

时间:2014-12-23 21:07:26

标签: c++ pointers

以下代码段,编译:

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

我想知道为什么C ++会允许指向节点struct 内的节点的指针(也可能是一个节点本身......因为你只能取消引用它),而不是实际的节点..类似下面的东西不能编译:

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声明为指针?

1 个答案:

答案 0 :(得分:1)

考虑尝试为结构分配足够的内存。如果结构中有node,那么节点有多大?它的大小为int2 * sizeof(node)。但node有多大?它是递归的,并且没有办法让班级A的成员属于A类型。这就像说一个人是由一个头,一个双臂,两条腿和一个人组成。它没有意义。

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

至于你的第二个问题,那就是new在C ++中是如何运作的。它返回指向已分配对象的指针。

似乎你可能会在Java背景下遇到这个问题?在Java中,指针不会暴露给程序员。 new关键字会返回引用,您可以将类A的成员视为A。但这只能起作用,因为Java中的对象实例成员实际上是引用,而不是对象本身。