0

我的帖子是书的代码。

void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));  
/*Why it can be without name of pointer "comp"? like this: */
void qsort(void *lineptr[], int left, int right, int (*)(void *, void *)); */

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  ................
}     

为什么不喜欢(int (*comp)(void*,void*))(numeric ? numcmp : strcmp)主要?代码注释中有问题。

4

1 回答 1

3

qsort正在传递一个指向函数的指针。该函数要么是要么numcmp基于strcmp的值numeric。该函数指针被强制转换为qsort喜欢的类型。在这条线上

    (int (*)(void*,void*))(numeric ? numcmp : strcmp));

(int (*)(void *,void *))是一个演员表。当您进行强制转换时,您不指定变量名称。例如,如果您将 anint转换为 a float,您将执行以下操作:

int a = 5;
float b = (float)a;

您不会使用名称:

float b = (float somename)a;  /* invalid -- names are not used in type casting */
于 2013-06-20T03:57:21.700 回答