嗨,我是学习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;
}
答案 0 :(得分:0)
-> 用于访问具有结构指针的结构成员。
structure_pointer->structure_member
其中结构变量使用“。”运算符。
structure_variable.structure_member
您的compareFunction可以修改为
int compareFunction(const void *a, const void *b){
if(a->age > b->age){
return 1;
} else if (a->age < b->age){
return -1;
}
if (strcmp(a->name, b->name)<0){
return 1;
} else if (strcmp(a->name, b->name)>0){
return -1;
}
if (a->height < b->height){
return 1;
} else if (a->height > b->height){
return -1;
}
return 0;
}