结构体互相指向

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

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

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

● page 和 button

#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

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实现"对象"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值