"struct Obj* obj" 和 "Obj* obj" 之间的区别

Difference Between "struct Obj* obj" and "Obj* obj"

struct Element{
    Element() {}
    int data = NULL;
    struct Element* right, *left;
};

struct Element{
    Element() {}
    int data = NULL;
    Element* right, *left;
};

我正在使用二叉树,并且正在查找一个示例。在示例中,Element* rightstruct Element* right。这些有什么区别,写数据结构用哪个比较好?

我是从这个网站查找的: https://www.geeksforgeeks.org/binary-tree-set-1-introduction/

在C中,struct关键字必须使用来声明结构变量,但可选(在大多数情况下)在 C++ 中。

考虑以下示例:

struct Foo
{
    int data;
    Foo* temp; // Error in C, struct must be there. Works in C++
};
int main()
{
    Foo a;  // Error in C, struct must be there. Works in C++
    return 0;
}

示例 2

struct Foo
{
    int data;
    struct Foo* temp;   // Works in both C and C++
};
int main()
{
    struct Foo a; // Works in both C and C++
    return 0;
}

在上面的例子中,temp 是一个 指向 non-const Foo.

的数据成员

此外,我建议使用一些 good C++ book 来学习 C++。

在 C++ 中,定义一个 class 也会定义一个具有相同名称的类型,因此使用 struct Element 或只是 Element 意味着同样的事情。

// The typedef below is not needed in C++ but in C to not have to use "struct Element":
typedef struct Element Element;
struct Element {
    Element* prev;
    Element* next;
};

您很少需要在 C++ 中使用 struct Element(定义中除外)。

然而,在一种情况下您确实需要它,那就是当您需要在同名的类型和函数之间消除歧义时:

struct Element {};
void Element() {}

int main() {
    Element x;  // error, "struct Element" needed
}