gpt4 book ai didi

c - qsort 一个指向结构体指针数组的双指针

转载 作者:行者123 更新时间:2023-11-30 21:27:26 27 4
gpt4 key购买 nike

嗨,我是学习 C 编程语言的新手,很难理解这个问题。我想对指向 struct[person] 指针数组的双指针进行排序。我需要根据多个标准对结构指针进行排序。 (年龄按升序排列,姓名和高度均按降序排列)。我想知道下面的比较函数和 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;
}

最佳答案

-> 用于通过结构指针访问结构成员。

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;
}

关于c - qsort 一个指向结构体指针数组的双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51798258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com