繁体   English   中英

在C中以void指针的形式存储通用数据

[英]Storing generic data in the form of void pointer in C

我正在尝试使用void指针以C语言存储通用数据

这是用于存储通用数据类型的结构

 struct Node{
        int id;  // Id of the node 
        void *data; // Variable Which stores data
    };

我通过这种方法存储数据

int graph_setnode_data(graph_t *graph,int id,void *data){
    struct Node *node = getnode(graph,id);
    if(node != NULL){
        node->data = data;
        return 0;
    }
    return 1;
}

并通过访问数据

void* graph_getnode_data(graph_t *graph,int id){
    struct Node *node = getnode(graph,id);
    if(node != NULL){
        return node;
    }
    return NULL;
}

这就是我使用这些方法的方式

struct Person{
    char *name;
    int age;
};
int main(){
    struct Person *person = malloc(sizeof(struct Person));
    person->name = "Goutam";
    person->age = 21;

    graph_t *graph = graph_init(2);
    graph_createpath(graph,0,1);
    graph_createpath(graph,1,0);
    graph_setnode_data(graph,0,(void *)person);
    struct Person *data =(struct Person *) graph_getnode_data(graph,0);
    printf("%d\n",data->age);
    graph_destroy(graph);
    return 0;
}

但是我得到的输出:

38162448

您将返回节点,而不是返回存储在节点中的数据:

void* graph_getnode_data(graph_t *graph,int id){
    struct Node *node = getnode(graph,id);
    if(node != NULL){
        return node->data; // <---- This should fix the bug.
    }
    return NULL;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM