Home > Back-end >  Difference Between "struct Obj* obj" and "Obj* obj"
Difference Between "struct Obj* obj" and "Obj* obj"

Time:05-29

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/

CodePudding user response:

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 .

CodePudding user response:

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
}
  • Related