首页 > 其他 > 详细

结构体互相指向

时间:2014-03-10 16:43:47      阅读:407      评论:0      收藏:0      [点我收藏+]

结构体互相指向,一般有以下应用场景。最主要的是不要误认为结构体互相指向是"箱中箱"(网上真有这样认知的)。

1、相互回溯,一一对应关系

struct A 和 struct B逻辑关系式一一对应。典型的如page和button,main menu和sub menu。

● page 和 button

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define MAX_BUTTON_NUM  8
 
struct _guipage_;
typedef struct _button_
{
    int x, y;
    int w, h;
    char *name;
    char *comment;
    struct _guipage_ *pGuiPage;
     
    bool visible;
    bool disable;
    buttontype_t type;
}button_t;
 
typedef struct _guipage_{
    char *name;
    char *header;
 
    /*按钮*/
    button_t *pButton[MAX_BUTTON_NUM];
    int ButtonNum;
}guipage_t;

● main menu 和 sub menu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct T_Menu;
//菜单项结构体
typedef struct T_MenuItem
{  
    BYTE            aucItemName[20];  //菜单项的内容
    WORD32          dwItemIndex;      //菜单项索引  
    struct T_Menu   *ptParentMenu;    //此菜单项所在的菜单
    struct T_Menu   *ptSubMenu;       //菜单项链接的子菜单
    SWORD32         (*pFunc)();       //该菜单项对应的功能函数指针
}T_MenuItem;
 
//菜单结构体
typedef struct T_Menu
{  
    BYTE          aucMenuName[20];  //菜单的名字,居中显示 
    WORD32        dwItemNum;        //菜单有多少项
    WORD32        dwMenuIndex;      //菜单索引
    WORD32        dwItemXOffset;    //菜单中各个菜单项显示的X轴的偏移
    WORD32        dwCurItemIndex;   //当前选中的菜单项索引
    struct T_Menu *ptParentMenu;    //上一级菜单
    T_MenuItem    atItem[40];       //菜单项
}T_Menu;

此场景,struct A 和 struct B强调的是逻辑上的一一对应的主从关系。

2、抽象和具体

?ffmpeg中这样的用法很多,可以参考本人的另一篇博客:c实现"对象"

sff





结构体互相指向,布布扣,bubuko.com

结构体互相指向

原文:http://www.cnblogs.com/freezlz/p/3590250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!