                                         /* Chapter 12 - Program 1 */
main()
{
struct animal {
   char name[25];
   char breed[25];
   int age;
} *pet1, *pet2, *pet3;

   pet1 = (struct animal *)malloc(sizeof(struct animal));
   strcpy(pet1->name,"General");
   strcpy(pet1->breed,"Mixed Breed");
   pet1->age = 1;

   pet2 = pet1;   /* pet2 now points to the above data structure */

   pet1 = (struct animal *)malloc(sizeof(struct animal));
   strcpy(pet1->name,"Frank");
   strcpy(pet1->breed,"Labrador Retriever");
   pet1->age = 3;

   pet3 = (struct animal *)malloc(sizeof(struct animal));
   strcpy(pet3->name,"Krystal");
   strcpy(pet3->breed,"German Shepherd");
   pet3->age = 4;

       /* now print out the data described above */

   printf("%s is a %s, and is %d years old.\n", pet1->name,
           pet1->breed, pet1->age);

   printf("%s is a %s, and is %d years old.\n", pet2->name,
           pet2->breed, pet2->age);

   printf("%s is a %s, and is %d years old.\n", pet3->name,
           pet3->breed, pet3->age);

   pet1 = pet3;   /* pet1 now points to the same structure that
                      pet3 points to                           */
   free(pet3);    /* this frees up one structure               */
   free(pet2);    /* this frees up one more structure          */
/* free(pet1);    this cannot be done, see explanation in text */
}
