我正在阅读K& R书(第一次)我遇到了一个使用指针的函数。
函数调用
qsort(
(void **)lineptr,
0,
nlines-1,
(int (*)(void *,void *)) (numeric ? numcmp : strcmp)
);
我理解的是,基于numeric
,strcmp
或numcmp
的地址被传递,地址类型被转换为(int (*)(void *,void *))
,因为函数需要
功能定义
void qsort(void *v[],int left,int right, int (*comp)(void *, void *))
关于函数指针,我的解释是否正确?
答案 0 :(得分:5)
是的,没错。
由于strcmp()
需要const char *
个参数,因此需要强制转换,但转换为void *
是安全的。
如果查看the current manual page for qsort()
,您可以看到回调的参数应该是const void *
,而不仅仅是void *
,但这也是一个安全的转换(只要回调处理指针当然是指向const
的指针。