The reason is that a structure in C does not define a new data type, (this is a difference between C and C++ because in C++ it does). The name you give after a struct keyword is called it's tag, the tag by itself is not a type name. Thus when you want to create a variable that is a struct in C you must say it is a struct, then specify the tag to identify which kind of struct. The struct keyword is ignored by a C++ compiler when declaring variables or pointers to a struct.