I don't understand what struct node *next
does, I know it points to the address of the next variable; ...
This is correct.
... but how as in implementation ?
The implementation is pretty much exactly how you described the behaviour: A pointer is implemented as an object whose value is the memory address of the pointed object.
Is node *next
similar to struct node *next
?
Not only similar, but pretty much identical.†
And what about the *start
is it similar to struct node *start
?
It is struct node *start
. See the complete declaration:
struct node /* structure definition */ *start;
It is a combined declaration of a variable, and definition of a structure.
† The struct
keyword is just used to disambiguate that the following identifier is in the name space†† of structure tags. In your case it is redundant, because there are no non-structure identifier Node
to disambiguate, and in C++ structure tags are also type names.
What you're probably looking at is C code, where the name space†† specifier is mandatory for structure tags.
†† In this context, I refer to C name spaces, not C++ name spaces.