Listing 4 Sorts structures via a pointer array

/* sort4.c: Sort structures via pointers */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NELEMS 4

struct person
{
   char last[16];
   char first[11];
   char phone[13];
   int age;
};

static int name_comp(const void *, const void *);
static int age_comp(const void *, const void *);

main()
{
   size_t i;
   static struct person some_people[NELEMS] =
     {{"Lincoln","Abraham","555-1865",161},
      {"Ford","Henry","555-1903",98},
      {"Ford","Edsel","555-1965",53},
      {"Trump","Donald","555-1988",49}};
   struct person *some_ptrs[NELEMS] =
   {some_people,some_people+l,some_people+2,
    some_people+3};

   qsort(some_ptrs, NELEMS, sizeof some_ptrs[0],
        name_comp);

   puts ("By name:");
   for (i = 0; i < NELEMS; ++i)
      printf("%s, %s, %s %d\n",
        some_ptrs[i]->last,
        some_ptrs[i]->first,
        some_ptrs[i]->phone,
        some_ptrs[i]->age);

   qsort(some_ptrs, NELEMS, sizeof some_ptrs[0],
        age_comp);

   puts("\nBy age:");
   for (i = 0; i < NELEMS; ++i)
      printf("%s, %s, %s %d\n",
        some_ptrs[i]->last,
        some_ptrs[i]->first,
        some_ptrs[i]->phone,
        some_ptrs[i]->age);
   return 0;
}

static int name_comp(const void *pl, const void *p2)
{
   struct person *sp1 = * (struct person **) p1;
   struct person *sp2 = * (struct person **) p2;
   int order = strcmp(sp1->last,sp2->last);

   if (order == 0)
      order = strcmp(sp1->first,sp2->first);
   return order;
}

static int age_comp(const void *pl, const void *p2)
{
   struct person *sp1 = * (struct person **) p1;
   struct person *sp2 = * (struct person **) p2;

   return sp1->age - sp2->age;

}

/* End of File */