Два структурных типа являются различными даже когда они имеют одни и те же члены. Например:
struct s1 (* int a; *); struct s2 (* int a; *);
есть два разных типа, поэтому
s1 x; s2 y = x; // ошибка: несоответствие типов
Структурные типы отличны также от основных типов, поэтому
s1 x; int i = x; // ошибка: несоответствие типов
Однако существует механизм для описания нового имени для типа без введения нового типа. Описание с префиксом typedef описывает не новую переменную данного типа, а новое имя этого типа. Например:
typedef char* Pchar; Pchar p1, p2; char* p3 = p1;
Это может служить удобной сокращенной записью.