指针语法C++
Pointer Syntax C++
关于二叉树 - 我看到了以下代码作为问题解决方案的一部分:
struct Node
{
int key;
struct Node *left, *right;
};
我的问题是"结构节点*左,*右"是什么意思,因为它是在第一个结构节点定义的主体中定义的。另外,如果这是C++为什么在这里使用结构而不仅仅是类/对象?
在C++(尤其是 C)中,类型通常总是由它们的构造表示。
例如
enum Foo { ... };
void doSomethingWithAFoo(enum Foo f);
struct Bar { ... };
void doSomethingWithABar(struct Bar bar);
虽然这在 C 中是必需的,但在 C++ 中不是必需的。在 C 语言中,它是通过使用typedef
来实现的。
typedef struct { ... } Foo; // Can now be referenced with just `Foo`
但是,规范中有一个特定的部分声明结构类型不能在其中包含自身的实例(更具体地说,它声明类型在完全声明之前不能引用自身)。
指针形式除外。这是因为指针在编译开始时是已知的大小,而结构只有在声明后才知道。
由于struct
早于C++(仅一点点),并且自ANSI C(C89)以来就已经存在,并且在大多数主要编译器中都存在,因此它们也存在于C++中(因为ANSI C可以在兼容的C++编译器中优雅地编译)。
但是,C++添加了类的概念,这在 C 中不存在。正如其他人所提到的,类和结构是相似的,因为它们都持有成员。在C++中,结构可以像类一样具有方法 - 显然在 C 中并非如此。
据我所知,唯一的区别是可见性;struct
s 默认为公共,class
es 默认为私有。C 没有可见性的概念。
表示它的样子。 递归声明仅表示 Node 结构具有两个字段,它们是指向其他节点的指针。
我读过结构和类之间的主要区别 C++ 是默认权限(默认情况下结构都是公共的)。 稍微简单一些,特别是因为继承不太可能。
struct Node
定义中struct Node *left, *right;
的含义是struct Node
的每个实例都包含指向其他struct Node
的成员(left
和right
)。
程序员有责任确保无论何时创建struct Node
,都正确初始化这些成员。 它们可以设置为NULL
(表示它们不指向任何对象)或另一个struct Node
的地址。
在C++中,left
和right
的初始化通常在构造函数中完成。 C 没有这个功能,所以,每次一些 C 代码创建一个struct Node
时,它通常必须显式初始化左右成员。
您显示的代码实际上是 C,尽管它会被C++编译器接受。 C++允许声明struct Node *left, *right;
省略struct
关键字。 C 没有。
在C++中,struct
和class
是一回事 - 区别在于成员的可访问性:默认情况下public
C++struct
成员class
private
成员。 C++struct
s(和class
es)能够做许多其他 Cstruct
不能做的事情。
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么