关于在main外面定义一个结构体及结构体变量的疑问

本人写了个图书管理代码,如果在main外面定义一个结构体struct BOOK及结构体变量*book,那book岂不是全局变量了,之后定义的任何一个函数都可以访问book,尽然如此,为什么有的函数还需要传参呢?比如void add(struct BOOK *book)为什么不写成void add()。

book作为全局变量,在整个程序中都可以访问。在main函数外部定义book是为了方便在不同函数中访问和修改。
但是,在调用函数时还需要传递book指针给函数,是因为函数内部操作的是book的副本,而不是book本身。如果不传递book指针给函数,那么函数内部对book的修改将不会影响到全局变量book。
所以,在调用函数时传递book指针,是为了让函数可以对全局变量book进行修改。
所以,void add(struct BOOK *book)
这样是为了方便函数内部对book进行修改.

你放出代码来看,才能知道*book到底是个变量还是个类型,也许只是为了后面用起来方便而把指针也通过typedef定义成了类型而已
你不放代码,全靠猜,然后大家跟你一起猜?