节点结构调用自身
Node struct calling itself
以下代码片段可以编译:
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
,那么节点有多大?这是一个int
加2 * sizeof(node)
的大小。但是node
???有多大它是递归的,并且无法使类的成员A
类型为A
。这就像说一个人是由一个头、一只胳膊、两条腿和一个人组成的。这根本说不通。
另一方面,指针总是某个设置大小(通常为 4 或 8 个字节)。那么node
有多大呢?这是sizeof(int) + 2*sizeof(node*)
.
至于你的第二个问题,这就是new
在C++的工作方式。它返回指向已分配对象的指针。
似乎您是在有一些Java背景的情况下进入这个问题的?在 Java 中,指针不向程序员公开。new
关键字返回一个引用,您可以让看似类的成员A
成为A
。但这只有效,因为 Java 中的对象实例成员实际上是引用,而不是对象本身。
相关文章:
- 没有为自己的结构调用列表推回方法
- 调用 C 文件中的"C++"结构
- C++结构默认调用值
- 在结构外部调用指向函数的指针
- C++结构到德尔福记录dll调用
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- 无法调用结构内的成员函数指针
- 通过指针算法调用结构的结构属性
- 使用指针算法调用结构内的结构数组
- 使用QString或字符串调用结构对象
- 如何从单独的函数调用结构
- 我可以从自身内部调用结构吗?
- 调用结构构造函数后初始化的值是什么
- C++调用结构中类的元素
- 当我使用带有数组订阅的指针调用结构变量时出错
- 将常量引用对象作为参数传递时出现问题,VS 调试器报告"'.getXCoord'左侧必须具有调用/结构/联合"
- (c++)如何从另一个文件调用结构
- 调用结构的虚函数时出现segfault
- 调用结构内部的成员函数指针之一
- 如何根据布尔类型成员函数的返回值调用结构成员函数