gpt4 book ai didi

c - K&R 指向函数代码的指针

转载 作者:行者123 更新时间:2023-11-30 20:23:43 25 4
gpt4 key购买 nike

K&R 第 119 页显示了用函数指针编写的 qsort:

if ((nlines = readlines(lineptr, MAXLINES)) >= 0)
qsort((void **) lineptr, 0, nlines -1,
(int (*)(void *, void *))(numeric ? numcmp : strcmp));

在此代码中,lineptr 被转换为指向 void 的指针。它是一个指向 char 指针数组的指针。不过代码也可以写成:

    qsort((void *) lineptr, 0, nlines-1, 

它仍然运行得很好。编译器能直接计算出来吗?为什么要以一种或另一种方式编写代码?

最佳答案

在该声明中,第一个参数的类型为 void* lineptr[],相当于 void** lineptr

如果您使用

调用
qsort((void *) lineptr, 0, nlines-1);

它仍然有效,因为您可以将 void* 转换为 C 中的任何其他指针类型。最好使用完全匹配的类型,但这更多的是编码指南,而不是语言的要求.

有可能,因为我不确定,当本书编写时,编译器不支持从 void*void** 的隐式转换。因此,本书使用 (void**)lineptr 作为第一个参数。

关于c - K&R 指向函数代码的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35590287/

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