免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1447 | 回复: 0
打印 上一主题 下一主题

[学习] list_head理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-24 13:01 |显示全部楼层 |倒序浏览
  1. /*
  2. * =====================================================================================
  3. *
  4. *       Filename:  demo.c
  5. *
  6. *    Description:  
  7. *
  8. *        Version:  1.0
  9. *        Created:  10/24/2012 09:32:10 AM
  10. *       Revision:  none
  11. *       Compiler:  gcc
  12. *
  13. *         Author:  scar (gao), fevergao@gmail.com
  14. *   Organization:  Zecloud.Inc
  15. *
  16. * =====================================================================================
  17. */

  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include "list.h"
  22. struct person {
  23.     char                name[20];
  24.     struct list_head    dog_list;
  25.     struct list_head    cat_list;
  26. };
  27. struct dog {
  28.     char                name[20];
  29.     struct list_head    dog_list;
  30. };
  31. struct cat {
  32.     char                name[20];
  33.     struct list_head    cat_list;
  34. };
  35. int main(int argc, const char *argv[])
  36. {
  37.     struct person       person;
  38.     struct dog          *tmp_dog = NULL;
  39.     struct dog          *tmp = NULL;
  40.     struct dog          *next = NULL;
  41.     struct cat          *tmp_cat = NULL;
  42.     struct cat          *tmp1 = NULL;
  43.     struct cat          *next1 = NULL;
  44.     int                 i = 0;

  45.     strcpy (person.name, "scar");
  46.     INIT_LIST_HEAD (&person.dog_list);
  47.     INIT_LIST_HEAD (&person.cat_list);
  48.     for (i = 0; i < 5; i++) {
  49.         tmp_dog = malloc (sizeof (*tmp_dog));
  50.         tmp_cat = malloc (sizeof (*tmp_cat));
  51.         if (!tmp_dog)
  52.             return -1;
  53.         if (!tmp_cat)
  54.             return -1;
  55.         sprintf (tmp_dog->name, "%c", 'a' + i);
  56.         sprintf (tmp_cat->name, "%c", 'm' + i);
  57.         list_add_tail (&tmp_dog->dog_list, &person.dog_list);
  58.         list_add_tail (&tmp_cat->cat_list, &person.cat_list);
  59.     }

  60.     list_for_each_entry (tmp, &person.dog_list, dog_list) {
  61.         printf ("tmp->name=%s\n",tmp->name);
  62.     }
  63.     list_for_each_entry (tmp1 ,&person.cat_list, cat_list) {
  64.         printf ("---tmp1->name=%s\n",tmp1->name);
  65.     }
  66. #if 1
  67.     list_for_each_entry_safe (tmp, next, &person.dog_list, dog_list) {
  68.         list_del (&tmp->dog_list);
  69.         free (tmp);
  70.     }
  71.     list_for_each_entry_safe (tmp1,next1, &person.cat_list, cat_list) {
  72.         list_del (&tmp1->cat_list);
  73.         free (tmp1);
  74.     }
  75. #endif
  76.    
  77.     return 0;
  78. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP