结构体互相指向

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

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





posted @ 2014-03-09 17:24  自由度  Views(389)  Comments(0)    收藏  举报