c - C 中使用变量或指针访问结构体成员

标签 c arrays sorting struct

我有一个结构体,想要使用合并排序对该结构体的数组进行排序。 我需要将排序参数传递给合并函数并访问结构成员。 这可以用 C 语言完成吗?

示例:

struct movie_imdb_data {
    char color[15];
    char director_name[100];
    int num_critic_for_reviews;
    int duration; /// in min not date and time 
    int director_facebook_likes;
    int actor_3_facebook_likes;
    char actor_2_name[100]; 
    int actor_1_facebook_likes;
    int gross;
};

main功能,我有:

    if (argc > 2) {
        column_sort = argv[2];
    }

现在我想打电话merge_sort(<array of struct>, <column_sort *>)

我可以访问数组中的成员 array[0]->column_sort进行比较?

现在我想调用合并排序并传递

我想传递数组和排序参数(我需要排序数组)我可以使用变量代替成员名称,即..

arr[1].column_sort   

而不是

arr[1].color

最佳答案

听起来您想采用命令行参数来指定要排序的字段名称,然后对该字段进行排序。

为此,请尝试以下代码:

#include <stdlib.h>
#include <string.h>

/* compare function for field 3: "num_critic_for_reviews" */    
int compField3(const void *a, const void *b)
{
    struct movie_imdb_data* aStruct = (struct movie_imdb_data*)a;
    struct movie_imdb_data* bStruct = (struct movie_imdb_data*)b;
    return (aStruct->num_critic_for_reviews < bStruct->num_critic_for_reviews)?
        -1: (aStruct->num_critic_for_reviews > bStruct->num_critic_for_reviews)?
            +1: 0;
}

/* also define other compare functions for each field */

int main()
{
    const char* columnName = argv[2];
    struct movie_imdb_data* parray;
    parray = your-array;
    int (*comp)(const void *, const void *, void *) = 0;

    /* map the column name to compare function for that column */
    if (strcmp(columnName, "num_critic_for_reviews") == 0)
    {
        comp = compField3;
    }
    /* map other names to compare function for column */
    else if (...) {...}
    else { exit(1); /* if not recognized column name */ }

    qsort(parray, numElementsOfArray, sizeof(struct movie_imdb_data), comp);
    ...
}

希望这有帮助!

关于c - C 中使用变量或指针访问结构体成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414145/

相关文章:

c - 额外的文件访问或大量的重新分配

c - 使用带有整数的scanf的段错误

php - 如何解决 php 中没有数组作为类常量的问题?

c++ - 读取文本文件并将每一行保存为字符串 (C++)

带有 DLL 的 Python ctypes 参数 - 指向 double 组的指针

c - 如何在/etc/passwd 中添加、删除编辑用户名

Javascript蛇形图案网格

java - 连续排序数组

Javascript - 绕过排序尝试产生奇怪的行为

java - Unix 排序命令需要更长的时间,具体取决于它在何处执行?! (在从 IDE 运行的程序中 ProcessBuilder 最快,从终端运行最慢)