繁体   English   中英

qsort()-比较函数参数

[英]qsort() - compare function parameter

可以说我有一个名为Student的结构。

typedef struct student {
    int age;
    char name[10];
} Student;

我有一系列指向学生的指针。

Student *a[10];

我需要按学生姓名对数组进行排序。 所以我写了比较函数:

int compare(const void *a, const void *b){
    Student *temp1=*(Student **)a;
    Student *temp2=*(Student **)b;
    return strcmp(temp1->name, temp2->name);
}

然后我有排序的功能:

void SortArray(Student *a[], int len){
    qsort(a, len, sizeof(Student *), *compare*);
    printArray(a);
}

qsort的最后一部分是我没有得到的。 我看到了一些帖子,他们在其中写&compare ,而有些地方没有。 只有当我使用&compare它才起作用。
我如何知道是否使用&

作为函数引用的函数名称,您可以使用函数名称。 另外,如评论中所述, &也可以引用。

您是否尝试过调用该函数,例如:)

qsort(a, len, sizeof(Student *), ***********compare);

或喜欢

qsort(a, len, sizeof(Student *), &***********compare);

根据C标准(6.3.2.1左值,数组和函数指示符)

4函数指示符是具有函数类型的表达式。 除非是sizeof运算符(65)或一元&运算符的操作数,否则将类型为“ function returning type”的函数指定符转换为类型为“ pointer to function returning type”的表达式

所以在这个表达

***********compare

函数指示符compare将隐式转换为函数指针,然后应用取消引用,依次将其转换为函数类型,然后再次转换为函数指针,依此类推。

当然,您可以显式指定&compare尽管这不是必需的。

这是一个示范节目

#include <stdio.h>

void f(void)
{
    puts("Hello eitanmayer");
}

void g(void f(void))
{
    f();
}

int main( void )
{
    g(&******f);
}

它的输出是

Hello eitanmayer

因此,您代码的问题可能在其他地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM