阅读:1843回复:4
求教:c语言中函数重用
在c++中函数是可以重用的,但是我是在标准c来开发。
现在遇到一个问题,为几个不同的结构体类型创建链表, 这样,这几个函数结构就很一模一样,只是参数不同。 我把这几个类型定义成一个union类型来操作,就只需要写一个函数 但是其中又要对结构成员“next”做操作,这样就需要再增加一个参数来选择, 觉得不爽,看大家有没有好办法 |
|
|
沙发#
发布于:2005-06-24 17:56
为什么需要增加一个参数来选择呢?不增加也可以啊,你不是知道联合里面的数据类型吗?
|
|
板凳#
发布于:2005-06-30 11:18
在union中每个结构用不同的名字不就行了?
比如socket中的 struct in_addr { union { struct{ unsigned char s_b1, s_b2, s_b3, s_b4; } S_un_b; struct { unsigned short s_w1, s_w2; } S_un_w; unsigned long S_addr; } S_un; }; |
|
|
地板#
发布于:2005-07-02 03:13
全部用 LPVOID
|
|
地下室#
发布于:2005-07-03 03:37
介绍一种另外的方法
操作系统里边普遍采用的一种做法是专门为链表链接作一个struct 比如: struct link { struct link* next,*prev; } 然后在需要链接的结构里添加这个结构 struct a { 。。。 struct link link_list; 。。。 } link_list专门负责链接 如果当前节点为current, 需要取下一个元素时,可以先得到current-〉link_list->next 然后用得到的这个地址减去link_list本身在结构a中的位移量即可 ((a*)(current->link_list->next-(unsigned long)(&((a*)0)->link_list)) 这里&((a* 0))->link_list表示当结构a正好在地址0上时其成员link_list的地址 摘自LINUX内核源代码情景分析 windows里也是这样用的。 |
|
|