void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

有没有一种方法可以通过,比如说strcmpqsort,而不使用辅助函数?

我试着做:

qsort(..., (int (*) (const void*, const void*) (strcmp)));

推荐答案

你在演员阵容中的try 只是有一个错误的右(右)括号.最后一个应该在演员阵容的type人之后.所以,你可以改变:

(int (*) (const void*, const void*) (strcmp))
//                                          ^ wrong

(int (*) (const void*, const void*)) (strcmp)
//                                 ^ right

Alternatively, although hiding pointer types in typedef aliases is severely frowned-upon, function pointer types are an exception 到 that guideline. So, it is easier/clearer 到 define the required type for the qsort compara到r first:

typedef int (*QfnCast) (const void*, const void*);

Then, you can cast 到 that type:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int (*QfnCast) (const void*, const void*);

int main(void)
{
    char list[5][8] = {
        "Fred",
        "Bob",
        "Anna",
        "Gareth",
        "Joe"
    };

    qsort(list, 5, 8, (QfnCast)(strcmp));
    for (int i = 0; i < 5; ++i) printf("%s\n", list[i]);
    return 0;
}

C++相关问答推荐

函数指针始终为零,但在解除引用和调用时有效

有效地计算由一组点构成的等边三角形和等腰三角形的数量

在#include中使用C宏变量

堆栈帧和值指针

为什么GCC可以调用未定义的函数?

减法运算结果的平方的最快方法?

ESP32在vTaskDelay上崩溃

ARM64 ASIMD固有的加载uint8_t* 到uint16x8(x3)?

#If指令中未定义宏?

防止规范模式在C++中 echo 特殊字符

S的这种管道实施有什么问题吗?

FRIDA-服务器成为端口扫描的目标?

用C++实现余弦函数

在另一个函数中使用realloc和指针指向指针

从TCP连接启动UDP(C套接字)

为什么Linux无法映射这个PT_LOAD ELF段?

try 判断长整数是否为素数

即使客户端不发送数据,也会发生UNIX套接字读取

C 语言中 CORDIC 对数的问题

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言