【发布时间】:2019-01-18 18:18:44
【问题描述】:
您好,我是学习 C 编程语言的新手,无法理解这个问题。我想对一个指向 struct[person] 指针数组的双指针进行 qsort 排序。我需要根据多个标准对结构指针进行排序。 (年龄按升序排列,姓名和身高均按降序排列)。我想知道我的语法在以下比较函数和 qsort 调用中是否正确。
struct person {
int age;
float height;
char name[20];
};
struct person **arr = malloc(sizeof(struct person)*10);
..... this part is just initialisation
qsort(arr, 10,sizeof(struct person*), compareFunction);
int compareFunction(const void *a, const void *b){
struct person* p1 = (struct person*) a;
struct person* p2 = (struct person*) b;
if(p1 - >age > p2-> age){
return 1;
} else if (p1 -> age < p2 <-age){
return -1;
}
if (strcmp(p1 - >name, p2 ->name)<0){
return 1;
} else if (strcmp(p1-> name , p2->name)>0){
return -1;
}
if (p1 -> height < p2 ->height){
return 1;
} else if (p1 - > height > p2 ->height){
return -1;
}
return 0;
}
【问题讨论】:
-
struct person p1 = (struct person*) a;不正确。您不能将指针隐式转换为非指针 -
任何编译器都会告诉你你的语法是否正确。在这种情况下无需与人互动。
-
发布您的 qsort 函数原型以及您如何声明 doubleoointer
-
问题不完整,因为缺少代码的相关部分。虽然不可能给出一个严肃的答案。人们需要猜测,我不会做什么。
-
我们至少需要知道
doublePtr是如何定义和设置的。