[英]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.