c++ - 指针语法 C++

标签 c++ pointers struct

关于二叉树 - 我曾看到以下代码作为问题解决方案的一部分:

struct Node
{
    int key;
    struct Node *left, *right;
};

我的问题是“struct Node *left, *right”是什么意思,因为它是在第一个 struct Node 定义的主体中定义的。另外,如果这是 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++(仅稍早于 C++)并且自 ANSI C (C89) 及之前出现在大多数主要编译器中,因此它们也出现在 C++ 中(自 ANSI C可以在兼容的 C++ 编译器中优雅地编译)。

但是,C++ 添加了类的概念,C 中 存在类的概念。正如其他人所提到的,类和结构的相似之处在于它们都拥有成员。在 C++ 中,结构可以像类一样拥有方法 - 显然在 C 中情况并非如此。

据我所知,唯一的区别是可见性; struct 默认为 public,class 默认为 private。 C没有可见性的概念。

关于c++ - 指针语法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29574486/

相关文章:

c++ - 加载 mkvtoolnix-gui 时出错 "mkvtoolnix-gui: symbol lookup error: mkvtoolnix-gui: undefined symbol"

c++ - 在循环内使用 cin 进行循环,从而将不同的 char* 存储在一个数组中 (c++)

c - c语言如何连接两个字符串

c - 自引用结构和引用

c - 如何将 C 结构指定的初始值设定项重写为 C89(resp MSVC C 编译器)

c++ - C++ 中的矩阵运算(使用 Blas/Lapack 或其他替代方案)

c++ - 寻找更好的编码和压缩数字的方法

c - 打印指针指向的地址,地址指向的值,以及指针本身的地址

c++ - 如何复制结构数组?

c++ - 在 C++ 中为两个参数使用 const 覆盖运算符