Compare commits

..

2 Commits

Author SHA1 Message Date
01348b1436
Up through lcthw exercise 16 2024-04-20 12:41:53 -04:00
2dfa546e78
Something like ex15 extra credit 2024-04-20 08:38:27 -04:00
2 changed files with 82 additions and 3 deletions

View File

@ -13,8 +13,16 @@ int main(int argc, char *argv[])
int count = sizeof(ages) / sizeof(int); int count = sizeof(ages) / sizeof(int);
int i = 0; int i = 0;
char **first_name = &names[0];
char **last_name = &names[count - 1];
printf("first_name=%p last_name=%p\n", first_name, last_name);
printf("*first_name=%s *last_name=%s\n", *first_name, *last_name);
printf("---\n");
// first way using indexing // first way using indexing
for (i = 0; i < count; i++) { for (i = count - 1; i > -1; i--) {
printf("%s has %d years alive.\n", names[i], ages[i]); printf("%s has %d years alive.\n", names[i], ages[i]);
} }
@ -25,14 +33,14 @@ int main(int argc, char *argv[])
char **cur_name = names; char **cur_name = names;
// second way using pointers // second way using pointers
for (i = 0; i < count; i++) { for (i = count - 1; i > -1; i--) {
printf("%s is %d years old.\n", *(cur_name + i), *(cur_age + i)); printf("%s is %d years old.\n", *(cur_name + i), *(cur_age + i));
} }
printf("---\n"); printf("---\n");
// third way, pointers are just arrays // third way, pointers are just arrays
for (i = 0; i < count; i++) { for (i = count - 1; i > -1; i--) {
printf("%s is %d years old again.\n", cur_name[i], cur_age[i]); printf("%s is %d years old again.\n", cur_name[i], cur_age[i]);
} }

71
lcthw/ex16.c Normal file
View File

@ -0,0 +1,71 @@
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight)
{
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);
}
int main(int argc, char *argv[])
{
// make two people structures
struct Person *joe = Person_create("Joe Alex", 32, 64, 100);
struct Person *frank = Person_create("Frank Blank", 20, 72, 180);
// print them out and where they are in memory
printf("Joe is at memory location %p:\n", joe);
Person_print(joe);
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;
Person_print(joe);
frank->age += 20;
frank->weight += 20;
Person_print(frank);
// destroy them both so we clean up
Person_destroy(joe);
Person_destroy(frank);
return 0;
}