读书人

Kamp;R5.11节关于指向函数的指针解决方

发布时间: 2012-03-25 20:55:17 作者: rapoo

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

读书人网 >C++

热点推荐