From 9d258d22b830ea2c93401d2e4ebe79a43f7f8322 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Tue, 20 Sep 2011 14:38:34 -0400 Subject: [PATCH] version of ex16 with structs created on the stack, using dot syntax instead of ->, passing by value --- ex16.c | 56 ++++++++++++++------------------------------------------ 1 file changed, 14 insertions(+), 42 deletions(-) diff --git a/ex16.c b/ex16.c index e586bab..2e505c7 100644 --- a/ex16.c +++ b/ex16.c @@ -10,64 +10,36 @@ struct Person { int weight; }; -struct Person *Person_create(char *name, int age, int height, int weight) +void Person_print(struct Person who) { - struct Person *who = malloc(sizeof(struct Person)); - assert(who != NULL); - - who->name = strdup(name); - who->age = age; - who->height = height; - who->weight = weight; - - return who; -} - -void Person_destroy(struct Person *who) -{ - assert(who != NULL); - - free(who->name); - free(who); -} - -void Person_print(struct Person *who) -{ - printf("Name: %s\n", who->name); - printf("\tAge: %d\n", who->age); - printf("\tHeight: %d\n", who->height); - printf("\tWeight: %d\n", who->weight); + printf("Name: %s\n", who.name); + printf("\tAge: %d\n", who.age); + printf("\tHeight: %d\n", who.height); + printf("\tWeight: %d\n", who.weight); } int main(int argc, char *argv[]) { // make two people structures - struct Person *joe = Person_create( - "Joe Alex", 32, 64, 140); - - struct Person *frank = Person_create( - "Frank Blank", 20, 72, 180); + struct Person joe = {"Joe Alex", 32, 64, 140}; + struct Person frank = {"Frank Blank", 20, 72, 180}; // print them out and where they are in memory - printf("Joe is at memory location %p:\n", joe); + printf("Joe is at memory location %p:\n", &joe); Person_print(joe); - printf("Frank is at memory location %p:\n", frank); + printf("Frank is at memory location %p:\n", &frank); Person_print(frank); // make everyone age 20 years and print them again - joe->age += 20; - joe->height -= 2; - joe->weight += 40; + joe.age += 20; + joe.height -= 2; + joe.weight += 40; Person_print(joe); - frank->age += 20; - frank->weight += 20; + frank.age += 20; + frank.weight += 20; Person_print(frank); - // destroy them both so we clean up - Person_destroy(joe); - Person_destroy(frank); - return 0; }