当前位置: 首页 > Linux > 正文

神奇的void指针

void 指针在C语言里一直很神奇, 比如,有下面这么一个要求

    1. 为用户提供一些接口
    2. 将我们具体的实现方法藏起来

要怎么才能办到呢,这里,我们利用void指针来传递数据结构

提供为用户的头文件 public.h

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>

    void alloc_data(void **ptr);
    void display_data(void *ptr);
    void dealloc_data(void *ptr);

    typedef void * user_struct;

我们实现了三个函数,分别来分配,操作,释放数据,用户看到的只是这三个函数的名称。
对于操作的数据结构,我们使用 void 指针来传递

用户的使用方法 public.c

    #include "public.h"

    void main()
    {
        user_struct a;
        alloc_data(&a);
	    display_data(a);
	    dealloc_data(a);
    }

用户只能使用我们提供的函数,甚至对于传递的数据结构,也无从知道

这里是我们的具体实现 private.c

    #include "public.h"

    struct my_struct
    {
        int i;
        char *sp;
    };


    void alloc_data(void **ptr)
    {
        struct my_struct *c = NULL;
        if(c = (struct my_struct *)malloc(sizeof(struct my_struct)))
        {
            c->i = 1;
            c->sp = strdup("hello");
            *ptr = c;
        }
    }


    void display_data(void *ptr)
    {
        struct my_struct *c = (struct my_struct *)ptr;
        if(c)
        {
            printf("%d\n", c->i);
            printf("%s\n", c->sp);
        }
    }

    void dealloc_data(void *ptr)
    {
        struct my_struct *c = (struct my_struct *)ptr;
        if(c)
        {
		    free(c->sp);
		    free(c);
        }
    }

我们定义了自己的内部数据结构,将用户传递过来的void指针转换成我们自己的数据结构指针进行操作
从而将具体的实现隐藏了起来

    分享到:

本文固定链接: http://klwang.info/magical-void-pointer/ | 数据库|Linux|软件开发

该日志由 klwang 于2014年02月25日发表在 Linux 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 神奇的void指针 | 数据库|Linux|软件开发
关键字: ,

神奇的void指针:等您坐沙发呢!

发表评论

*
快捷键:Ctrl+Enter