如何转换指针以适应变量结构?

时间:2019-02-05 13:50:59

标签: c

我正在编写一个函数,我想初始化一个列表,该列表指向一些在调用初始函数期间可以更改的数据结构。然后调用数据。但是我不知道如何使指针变量。我尝试使用void指针,但是不知道如何使用结构长度来调用它,因此会出现一个错误,该指针指向空空间(我分配了空间)。我被搜索过一些文章,但没有帮助,我只用了3个月就学习了C。

这是我的代码,我张贴了部分代码。有一个初始函数和一个空函数。我不知道如何传递指针大小,以便空函数可以释放数据指针空间。希望你们能提供帮助,非常感谢。

typedef struct node{
    void *data;
    struct node *next,*prev,*head,*tail;
}Node;

typedef Node *List;

void empty_list(List plist){
    Node *tmp,*phead;
    phead=direct_to_head(plist);
    while (phead->next!=NULL) {
        tmp=phead->next;
        if(tmp->data!=NULL){
            free(tmp->data);
            tmp->data=NULL;
        }
        free(phead);
        phead=tmp;
    }
    free(phead);
    phead=NULL;
    plist=NULL;
}

List init_list(unsigned int count,size_t size){

    if(count==0)
        fprintf(stderr,"node number can't be zero");
    Node *head,*tail;
    head=(Node *)calloc(count+2, sizeof(Node));
    if(head==NULL){
        fprintf(stderr, "No space in initing.");
        return NULL;
    }
    tail=head+count+1;
    head->tail=head+count+1;
    head->next=head+1;
    tail->head=head;
    tail->prev=tail-1;
    while (count>0) {
        head++;
        head->data=(void *)calloc(1, size);
        if(head->data==NULL){
            fprintf(stderr, "No space in initing.");
            return NULL;
        }
        head->head=head-count;
        head->tail=tail;
        head->next=head+1;
        head->prev=head-1;
        count--;

    }
    return (head->head)+1;
}

1 个答案:

答案 0 :(得分:1)

  

我不知道如何传递指针大小,因此空函数可以释放数据指针空间。

free()不占用大小,而只占用指针。因此,无需将内存data的点传递到empty_list


要访问内存,data指向您要将指针转换为适当的类型,然后将其取消引用。

例如,如果您这样做

Node * head = init_list(1, sizeof (int));

您可以通过执行操作来访问头部的数据

*((int*) head->data) = 42;