Book booklist[] = new booklist[3];//wrong!
You are not allocating 3 booklists, you are allocating 3 books: Book booklist[] = new Book[3];//right!
Your prototype is wrong too. void Initalize(struct Book *[], int size);//wrong!
What is the name of the first argument??? void Initalize(struct Book (*booklist)[], int size);//right!
note that int *x[]; is an array of pointers, whereas int (*x)[]; is a pointer to an array.