指向函数的指针
为例说明指向函数的指针用法,接下来修改之前的排序函数,在给定可选参数-n的情况下,将函数按数值大小而非字典顺序排序。
#include <stdio.h>
#include <string.h>
#define MAXLINES 5000
char *lineptr[MAXLINES];
int readlines(char *s[],int maxlines);
void writelines(char *s[],int nlines);
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
int main(int argc,char *argv[])
{
int nlines;
int numeric=0;
if(argc>1&&strcmp(argv[1],"-n")==0)
{
numeric=1;
}
if((nlines=readlines(lineptr,MAXLINES))>=0)
{
qsort((void **)lineptr,0,nlinnes-1,(int (*)(void *,void *))(numeric?numcmp:strcmp));
return 0;
}
else
{
printf("input too big to sort\n");
return 1;
}
}
void qsort(void v[],int left,int right,int (*comp)(void *,void *))
{
int last,i;
if(left>=right)
{
return;
}
last=left;
for(i=left+1;i<=right;i++)
{
if((*comp)(v[i],v[left])<0)
{
swap(v,i,++last);
}
}
swap(v,left,last);
qsort(v,left,last-1,comp);
qsort(v,last+1,right,comp);
}