在列表中分配一个指向下一个节点的指针

时间:2018-12-30 16:13:47

标签: c pointers linked-list

我建立了一个名为User的结构。

因为我使用的User是几个数据结构,所以该结构仅存储有关用户的数据

typedef struct{
    long id;
    char *name;
    char *surname;
    int age;
    char gender;
    char *username;
    char *password;
    char *description;
    char *hobbies;
}User; 

现在我想为女性创建一个链表,所以我创建了

typedef struct{
    User *userWoman;
    struct Women *next;
}Women;

现在,当我尝试将指针分配给下一个指针时:

void push(Women **head,User *woman){
    if((*head)->next == NULL){
        (*head) -> userWoman = woman;
    }
    else{
        Women *newWoman = malloc(sizeof(Women));
        if (newWoman == NULL){
            printf("Allocation of newWoman failed\n");
            exit(1);
        }
        newWoman -> userWoman = woman;
        (*head)->next = newWoman;
    }
}

我得到了错误:从“女性*”分配给“结构女性*”的指针类型不兼容

接下来我该如何声明?它必须是女性类型

1 个答案:

答案 0 :(得分:2)

一步就可以定义一个结构和一个别名。当然,这是合法的,但是在解析结构的成员时类型别名是未知的。因此在解析成员时类型别名Women是未知的。编写Women *next时可能会出现编译器错误; struct Women *next并不会导致编译器错误,但是它被视为不完整类型的前向声明。

为结构命名,并将其用于声明此类型的成员:

typedef struct WomenStruct {
    User *userWoman;
    struct WomenStruct *next;
} Women;

稍后,Women*struct WomenStruct*将成为同义词,就像您写的一样。

struct WomenStruct {
    User *userWoman;
    struct WomenStruct *next;
};
typedef struct WomenStruct Women;  // let "Women" be an alias for "struct WomenStruct"