首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于 void 类型指针的使用,

2012-02-27 
关于 void 类型指针的使用,高手进~我定义了2个结构体typedefstructa{intiintjintkstructa*p_next}Aty

关于 void 类型指针的使用,高手进~
我定义了2个结构体
typedef   struct   a{
        int   i;
        int   j;
        int   k;
        struct   a   *p_next;
}A;

typedef   struct   b{
        char   ch;
        struct   b   *p_next;
}B;

这两个结构体是用来实现两个链表的节点
现在我想编写一个释放链表空间的程序

freeList(void   *   p){
//这里面利用p-> p_next,来释放链表的节点
}
问题:
是否可以像上面那样实现一个函数,对不同节点链表的释放?
(因为这两种结构体都有p_next成员,而释放程序中不设计其他)

可以或不可以,都讲一些理由,我好理解一下。
谢谢大家了~

[解决办法]
void 有p_next这个成员吗?
[解决办法]
不可以的吧,void指针不可以直接用的,要转换成其他相应的类型的指针才可以用的.
[解决办法]
必须知道指针类型才能使用
[解决办法]
有C不可以做的吗? :)

参考

typedef struct node_s {
struct node_s * p_next;
} node_t;

typedef struct a_node_s {
struct a_node_s * p_next;
int i;
int j;
int k;
} a_node_t;

typedef struct b_node_s {
struct b_node_s * p_next;
char ch;
} b_node_t;


void freeList (node_t *p)
{
// free ops.
}

a_node_t * a_hdr;
b_node_t * b_hdr;

freeList ((node_t*) a_hdr);
freeList ((node_t*) b_hdr);

保持 p_next成员在struct里的位置就可以了。

其实Java, Python里的对象模型就是这样做的, 楼主干的不赖。
[解决办法]
1
能不能在 freeList(void * p)函数,加一个参数

void freeList(void * p, unsigned char node_type)
{
swtich(node_type)
{
case 12: freeList_A((A* )p);break;
case 8: frseeList_B((B*)p);break;
default:break;
}
}

void freeList_A(A* p)
{

}
void freeList_B(B* p)
{

}

void main()
{
freeList(head, sizeof(*head));

}

热点排行