#include #include #include #define SIZE 64 #define NUM 10 struct person { unsigned long ssn; char fn[SIZE]; char ln[SIZE]; }; struct person* array[NUM]; int count = 0; void free_people() { int i; for( i = 0 ; i < NUM ; ++i) { free(array[i]); array[i] = NULL; } } void print_people() { int i; printf("=======================================================\n"); for( i = 0 ; i < NUM ; ++i) { printf("%lu %s, %s\t[%p] [%p]\n", array[i]->ssn, array[i]->ln, array[i]->fn, &array[i], array[i]); } printf("=======================================================\n"); } void add_person(unsigned long ssn, const char* fn, const char* ln) { array[count] = (struct person*) malloc(sizeof(struct person)); array[count]->ssn = ssn; strncpy(array[count]->fn, fn, SIZE-1); array[count]->fn[SIZE-1] = 0; strncpy(array[count]->ln, ln, SIZE-1); array[count]->ln[SIZE-1] = 0; count++; } int sort_people(const void* one, const void* two) { struct person* p1 = *(struct person**)one; struct person* p2 = *(struct person**)two; return p1->ssn - p2->ssn; } int main(int argc, char** argv) { add_person(123123123, "Alan ", "Alda"); add_person(666111666, "Betty ", "Boop"); add_person(411411411, "Cassius ", "Clay"); add_person(112123123, "Donnie ", "Darko"); add_person(555121255, "Eagle ", "Eye"); add_person(888444888, "Fred", "Flinstone"); add_person(333111333, "Gale ", "Glimmer"); add_person(911911911, "Herbert", "Hoover"); add_person(345123369, "Igor ", "Ilgaskus"); add_person(111222333, "James ", "Jameson"); print_people(); qsort(array, NUM, sizeof(struct person*), sort_people); print_people(); free_people(); return 0; }