代码之家  ›  专栏  ›  技术社区  ›  Tuna Arıyürek

“结构对象*对象”和“对象*对象”之间的区别

  •  1
  • Tuna Arıyürek  · 技术社区  · 2 年前
    struct Element{
        Element() {}
        int data = NULL;
        struct Element* right, *left;
    };
    

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

    我正在研究二叉树,我正在查找一个示例。在本例中, Element* right struct Element* right . 这两者之间有什么区别,哪一个更适合编写数据结构?

    我在这个网站上查看: https://www.geeksforgeeks.org/binary-tree-set-1-introduction/

    2 回复  |  直到 2 年前
        1
  •  2
  •   user12002570    2 年前

    在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 是数据成员 指向非常量的指针 Foo .


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

        2
  •  1
  •   Ted Lyngmo    2 年前

    在C++中,定义一个类也定义了一个同名的类型,所以使用 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 {};
    void Element() {}
    
    int main() {
        Element x;  // error, "struct Element" needed
    }