在C中实现具有相同类型和名称但不同参数的2个函数

时间:2014-05-07 14:49:43

标签: c string pointers struct polymorphism

我在C:

中实现了这个结构
typedef struct student_type_ {                  
    int number;                              
    char name[20];                       
    char lastname[20];                       
    struct student_type_ *next_student;        
} student_type;

现在我想按名称和姓氏对这些结构列表进行排序。因此,我想用不同的参数创建2个“比较”函数:一个函数获得2个指向2个名称,另一个函数获得2个姓氏。

这样的事情:

int compare ((*student_type)->name a, (*student_type)->name b){
    return strcmp(*a, *b);
}

int compare ((*student_type)->lastname a, (*student_type)->lastname b){
    return strcmp(*a, *b);
}

此代码不正确。你能帮我识别并解决问题吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以尝试

int compare_by_name(student_type * a, student_type * b){
    return strcmp(a->name, b->name);
}

int compare_by_lastname(student_type * a, student_type * b){
    return strcmp(a->lastname, b->lastname);
}

如果您想将其与bsort()结合使用,则可能需要使用void *代替参数。

答案 1 :(得分:2)

问题是student_type->姓氏不是类型,也不是student_type-> name。试试char *

当你修复它时,你会遇到这样的问题:在C中,具有相同参数的函数不能有两个名称(C不支持重载),所以你必须编写两个比较,一个实现规则比较名称和另一个名称以实现姓氏的比较(如果出于任何原因,规则不同)。

答案 2 :(得分:0)

在C中定义两个具有相同名称的函数构成了罪。在你的情况下,你真正想要的可能是两件事之一。定义两个函数:

  • compare_by_first_name
  • compare_by_last_name

具有明显的功能,或者一个函数:compare(char * name1, char * name2)然后被调用:

compare (student1->name, student2->name);
compare (student1->lastname, student2->lastname);