简体   繁体   中英

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

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

or

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

I was working with binary trees and I was looking up on an example. In the example, Element* right was struct Element* right . What are the differences between these and which one would be better for writing data structures?

I was looking up from this website: https://www.geeksforgeeks.org/binary-tree-set-1-introduction/

In C, struct keyword must be used for declaring structure variables, but it is optional (in most cases) in C++.

Consider the following examples:

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;
}

Example 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;
}

In the above examples, temp is a data member that is a pointer to non-const Foo .


Additionally, i would recommend using some good C++ book to learn C++.

In C++, defining a class also defines a type with the same name so using struct Element or just Element means the same thing.

// 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;
};

You rarely have to use struct Element (other than in the definition) in C++.

There is however one situation where you do need it and that is when you need to disambiguate between a type and a function with the same name:

struct Element {};
void Element() {}

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM