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

标签 c qsort

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

相关文章:

c - 这个 makefile 示例正确吗?

c++ - 快速排序后我的数据库的最终值损坏

c - 在 C 中使用 qsort

c - qsort 不排序无符号长整型列表

c - 在 C 中打印出从 (0 到 n) 的阶乘列表

c - 在只编写一个自由函数的情况下获得双重自由

c - 正在使用 lseek 扩展保证创建稀疏文件的文件

c - qsort 用零填充数组?

c - 使用 qsort() 对组合结构进行排序

c - 具有位域的结构的内存布局