相同的功能,但传递给函数的参数不同

same function but different parameter passing to function

struct student {

    char            *s_name;

    struct student_id   s_id;

    /** Number of references to this student. */
    unsigned int         s_ref;

    /** Transcript (singly-linked list, NULL terminator). */
    struct transcript_entry *s_transcript;

    /** Whether or not this student has completed his/her program. */
    student_complete     s_complete;
};

struct student* student_grad_create(const char *name, size_t namelen,
    struct student_id, int phd);

struct student* student_undergrad_create(const char *name, size_t namelen,
    struct student_id);

学生分为三种,硕士生、博士生和本科生。我需要实现一个函数,调用:

int student_add_entry(struct student *, struct transcript_entry *);

不知道如何判断学生类型?

我应该执行以下操作吗?

int student_add_entry(struct student *undergrad_create, struct transcript_entry *){}
int student_add_entry(struct student *grad_create, struct transcript_entry *){}

谢谢。

您可以将 student_type 字段添加到结构

struct student {
    char                    *s_name;
    struct student_id        s_id;
    /** Number of references to this student. */
    unsigned int             s_ref;
    /** Transcript (singly-linked list, NULL terminator). */
    struct transcript_entry *s_transcript;
    /** Whether or not this student has completed his/her program. */
    student_complete         s_complete;
    enum student_type        s_type;
};

你会有一个enum喜欢

enum student_type
{
    UndergraduateStudent,
    MasterStudent,
    PHDStudent
};

创建 struct student 的实例时,您将设置 s_type 字段,然后在其他任何地方使用 s_type 来确定学生的类型。

我还会编写一个通用函数来创建 struct student 的实例并向其传递所有可能的参数,如果您想要方便,您还可以为每个特定类型创建一个函数,您可以在其中传递通用函数的默认参数。

我正在处理一些学生注册系统问题。 1. 学生类型分为三种 2.本科生50分及格,硕士和博士65分及格 3.本科生必须完成40门课程,硕士生5门,博士生2门。

这是我需要实现的三个功能。 ' 下面是 transcript_entry:

的结构
struct transcript_entry {
    enum faculty         te_faculty;
    unsigned int         te_number;
    unsigned int         te_grade;
    /** Number of references to this entry. */
    unsigned int         te_ref;
    /** Next entry in the singly-linked list (or NULL terminator). */
    struct transcript_entry *te_next;
};

我实现了以下功能:

struct transcript_entry* transcript_entry(enum faculty faculty, unsigned int course_number, unsigned int grade){
    struct transcript_entry *trans_entry;
    trans_entry = malloc(sizeof(struct transcript_entry));
    trans_entry->te_faculty = faculty;
    trans_entry->te_number = course_number;
    trans_entry->te_grade = grade;
    trans_entry->te_ref = 1;
    trans_entry->te_next = NULL;
    return trans_entry;
}

/** Deallocate a @ref transcript_entry. */
void    transcript_entry_free(struct transcript_entry *trans_entry){
    free(trans_entry);
}

/** Increment a @ref transcript_entry's refcount. */
void    tehold(struct transcript_entry *trans_entry){
    trans_entry-> te_ref++;
}

我看了一些关于引用计数的教程。我不知道我的代码是否有意义。那么这意味着增加引用计数++,还是减少te_ref--;