免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 高峰
打印 上一主题 下一主题

大家在编程过程中有没有自己比较得意的代码,共享一下,我先来我的一个。 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-08-16 15:31 |只看该作者
原帖由 ivhb 于 2007-8-16 15:21 发表
呵呵,看来代码还需要进一步完善啊。
其实为什么不像tsearch,twalk的那这样设计呢。
你内部的struct link结构不需要给别人知道,也许你的结构就是
struct link {
  void *data;
  struct link *next;
}  ...



你的建议也不错,但实际操作起来就更麻烦了
比如就是释放节点就要释放节点本身和data

论坛徽章:
0
22 [报告]
发表于 2007-08-16 15:34 |只看该作者
原帖由 Edengundam 于 2007-8-16 15:23 发表



解引用是在最后一句??

我总觉得是:
next = *(link + sizeof(..))
free(linke);
link = next;

这个顺序吧???



next = *(link + sizeof(..))

这个不知道跑到哪里去啦,呵呵

论坛徽章:
0
23 [报告]
发表于 2007-08-16 15:36 |只看该作者
原帖由 高峰 于 2007-8-16 15:31 发表



你的建议也不错,但实际操作起来就更麻烦了
比如就是释放节点就要释放节点本身和data

释放data是一个回调函数,因为你不知道什么结构。
内部的销毁应该很简单吧。呵呵

论坛徽章:
0
24 [报告]
发表于 2007-08-16 15:37 |只看该作者
原帖由 高峰 于 2007-8-16 15:34 发表



next = *(link + sizeof(..))

这个不知道跑到哪里去啦,呵呵



link是结构体指针 + next的偏移, 最后解引用, 取得结构体实际的next的值.

我的思路, 还请斧正...

论坛徽章:
0
25 [报告]
发表于 2007-08-16 15:39 |只看该作者
当然这个想法的来历还有个原因是原来前辈写的系统中的数据结构已经成为了定式,如果要改数据结构风险太大,为了减少代码量提高编码效率,只能在其他地方想办法啦:wink:

论坛徽章:
0
26 [报告]
发表于 2007-08-16 15:51 |只看该作者
原帖由 Edengundam 于 2007-8-16 15:37 发表



link是结构体指针 + next的偏移, 最后解引用, 取得结构体实际的next的值.

我的思路, 还请斧正...



首先传入的参数link如果是void*的话,link + sizeof(..)是编译不过去的。因为编译器不知道+的步长是多少。
其次就我觉得你认为了链表的空间是连续的了。
我认为你认为的链表的存储空间为:
|data|next|data|next|.......

不知道对不对?

链表的存储空间是零散的。

论坛徽章:
0
27 [报告]
发表于 2007-08-16 15:57 |只看该作者
原帖由 高峰 于 2007-8-16 15:51 发表



首先传入的参数link如果是void*的话,link + sizeof(..)是编译不过去的。因为编译器不知道+的步长是多少。
其次就我觉得你认为了链表的空间是连续的了。
我认为你认为的链表的存储空间为:
|data|nex ...



一般用这个宏取偏移
#define offsetof(type, field)        ((long) &((type *)0)->field)

我的写法显然不会假设连续.

论坛徽章:
0
28 [报告]
发表于 2007-08-16 16:04 |只看该作者
define offsetof(type, field)        ((long) &((type *)0)->field)


惭愧,这个方法我没有想到,相当好哦。

不过这个type怎么传入啊?因为要通用。

论坛徽章:
0
29 [报告]
发表于 2007-08-16 16:06 |只看该作者
宏,直接些在offset的第一个位置不就行了?

论坛徽章:
0
30 [报告]
发表于 2007-08-16 16:07 |只看该作者
原帖由 高峰 于 2007-8-16 16:04 发表


惭愧,这个方法我没有想到,相当好哦。

不过这个type怎么传入啊?因为要通用。

要先看看cfaq了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP