gpt4 book ai didi

c - 指向函数的指针 Kernighan 书

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:16 26 4
gpt4 key购买 nike

我的帖子是书的代码。

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

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

最佳答案

qsort 被传递给一个函数指针。该函数是 numcmpstrcmp,具体取决于 numeric 的值。该函数指针被转换为 qsort 喜欢的类型。在这条线上

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

(int (*)(void *,void *)) 是一个强制转换。转换时不指定变量名。例如,如果您将 int 转换为 float,您可以:

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

你不会使用名字:

float b = (float somename)a;  /* invalid -- names are not used in type casting */

关于c - 指向函数的指针 Kernighan 书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com