首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

K&R5.11节,关于指向函数的指针解决方案

2012-03-25 
K&R5.11节,关于指向函数的指针#defineMAXLINES5000char*lineptr[MAXLINES]intreadlines(char*lineptr[],i

K&R5.11节,关于指向函数的指针
#define   MAXLINES   5000
char   *lineptr[MAXLINES];

int   readlines(char   *lineptr[],   int   nlines);
void   writelines(char   *lineptr[],   int   nlines);
void   qsort(void   *lineptr[],   int   left,   int   right,   int   (*comp)(void   *,   void   *));
int   numcmp(char   *,   char   *);

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,   nlines-1,  
            (int   (*)(void*,void*))(numeric   ?   numcmp   :   strcmp));
            writelines(lineptr,   nlines);
            return   0;
      }   else   {
            printf( "input   too   big   to   sort\n ");
            return   1;
      }
}
这里面有几个地方我不知道该怎么理解,一个是(void   **)lineptr这里(void   **)是什么意思,还有就是void*与void   *有什么区别??为什么qsort声明时是
int   (*comp)(void   *,   void   *),实际调用时是
(int   (*)(void*,void*))(numeric   ?   numcmp   :   strcmp)
而这一长串又该怎么理解呢??谢谢拉!!!

[解决办法]
(void**)强制转化
void* void * 没区别
(int (*)(void*,void*))这是个函数指针的强制转化
(numeric ? numcmp : strcmp)这是个三元表达式,根据numeric值来确定使用那个函数进行比较.

第三个参数写的够BT

热点排行