qsort指向结构指针数组的双指针

时间:2018-08-11 09:19:22

标签: c qsort

嗨,我是学习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;
    }

1 个答案:

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