关于typedef的疑惑

这两种写法有什么区别吗?学校课上给的例子用的第二种typedef,不明白为什么不用第一种,效果是一样的吧?
第一种:

struct Book {
    char no[15];
    char name[50];
    float price;
};

Book book1,book2;

第二种:

typedef struct {
    char no[15];
    char name[50];
    float price;
}Book;

Book book1,book2

有区别呀,第一种还要加上struct才是完整的结构体类型
你就用一个Book是不可以的
typedef的作用是对类型重命名
第二种的意思是将这个结构体的类型 重命名为 Book
也就是说经过typedef后,结构体类型可以是Book了

第一种写法过不了编译的,第一张写法定义了一个结构体类型,这个类型的名字是struct Book。你定义结构体变量的时候也要写成struct Book book1,book2;
第二种就是给这个结构体类型定义了一个别名,叫做Book,这种去定义结构体变量用Book book1,book2;就行了。