结构体互相指向,一般有以下应用场景。最主要的是不要误认为结构体互相指向是"箱中箱"(网上真有这样认知的)。
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强调的是逻辑上的一一对应的主从关系。
?ffmpeg中这样的用法很多,可以参考本人的另一篇博客:c实现"对象"
sff
原文:http://www.cnblogs.com/freezlz/p/3590250.html