>>257
俺も汎用的にしてみた。
void *max_in_array(void *a, int n, int elemsize, int(*cmp)(const void *,const void *))
{
  int i;
  char *max = a;
  char *p = ((char*)a) + elemsize;
  char *end = ((char*)a) + elemsize * n;
  for(; p < end; p += elemsize)
    if( (*cmp)(max, p) < 0 ) max = p;
  return max;
}

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(*(a)))

#define MAX_IN_ARRAY(a, cmp, type) \
  ((type*)max_in_array(a, ARRAY_SIZE(a), sizeof(*(a)), cmp))

int int_cmp(const void *a, const void *b)
{
  return *(int*)a - *(int*)b;
}

int main()
{
  int x[] = {3,1,4,1,5,9,2};
  int max = *MAX_IN_ARRAY(x, int_cmp, int);
  printf("max = %d\n", max);
  return 0;
}