#include #include struct animal { char name[16]; float weight; void (*print_info)(struct animal*); }; void generic_animal_print(struct animal* a){ printf("Name: %s\nWeight: %f\n", a->name, a->weight); } /* If it were a C++ method, we'd do this: void whale_print(){ printf("Name: %s\nWeight: %f (Note: Whale weights are in tons)\n", this->name, this->weight); } */ void whale_print(struct animal* a){ printf("Name: %s\nWeight: %f (Note: Whale weights are in tons)\n", a->name, a->weight); } int main(){ struct animal a1; strcpy(a1.name, "Fuzzy"); a1.weight = 6.1; a1.print_info = generic_animal_print; struct animal a2 = {"Tiger", 8.1, generic_animal_print}; struct animal a3 = {"Sneaky", 14, whale_print}; struct animal a4 = { .name = "Zeke", .weight = 9, .print_info = generic_animal_print }; a1.print_info(&a1); a2.print_info(&a2); a3.print_info(&a3); a4.print_info(&a4); return 0; }