NBPNBP, по старым правилам языка C (не C++) ключевое слово struct является неотъемлемым элементом типа.
/* Описание пользовательского тип struct S. */
struct S {
int x;
};
/* Объявление переменной типа. */
struct S s;
/* S s; - неправильно для C, но правильно для C++. */
/* Объявление указателя типа. */
struct S *p = &s;
Переменную можно объявить сразу после описания типа:
struct S {
int x;
} s;
или для указателя:
struct S {
int x;
} *p;
Чтобы не надо было тащить за собой слово struct, можно использовать определение типа с помощью конструкции typedef:
typedef <имеющийся тип> <идентификатор 1 нового типа>[, <идентификатор 2 нового типа>[, ...]];
Получится:
/* Описание пользовательских типов struct _S и S. */
typedef struct _S {
int x;
} S, *PtrS;
/* Объявление переменных типа. */
struct _S s1;
S s2; /* так короче */
/* Объявление указателей типа. */
struct _S *p1 = &s1;
S *p2 = &s2; /* так короче */
PtrS p3 = p2; /* так тоже коротко */