C передается по значению, поэтому любые изменения, внесенные в параметр, являются локальными для функции. Если вы хотите изменить значение в вызывающей стороне, вам необходимо передать адрес. например:
#include <stdio.h>
enum Color {red, green, blue};
char *colornames[] = { "red", "green", "blue" };
struct Book {
int pages;
char *author;
char *title;
enum Color color;
};
void
getInfo(struct Book *book)
{
book->pages= 200;
book->author = "Cervantes";
book->title= "El Quijote";
book->color = green;
};
void
showInfo(const struct Book *book)
{
printf("pages: %d\n", book->pages);
printf("author: %s\n", book->author);
printf("title: %s\n", book->title);
printf("color: %s\n", colornames[book->color]);
}
int
main(void)
{
struct Book book1;
getInfo(&book1);
showInfo(&book1);
return 0;
}