假设我有一个名为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
时才有效
我如何知道是否使用&
?
答案 0 :(得分:1)
作为函数引用的函数的名称,您可以使用函数的名称。另外,如评论中所述,&
也可以参考。
答案 1 :(得分:0)
您是否尝试过调用该函数,例如:)
qsort(a, len, sizeof(Student *), ***********compare);
或喜欢
qsort(a, len, sizeof(Student *), &***********compare);
根据C标准(6.3.2.1 Lvalues,数组和函数指示符)
4函数指示符是具有函数类型的表达式。 除非它是sizeof operator65)或一元&的操作数。 operator,函数指示符,返回类型为''的函数 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
所以代码的问题可能在其他地方。