最近在看数据结构,动态存储的边界标识法有点疑问
typedef struct WORD{
union{
struct WORD *llink; //指向直接前驱
struct WORD *uplink; //指向结点本身
};
int tag; //标记域,0表示为空闲块;1表示为占用块
int size; //记录内存块的存储大小
struct WORD *rlink; //指向直接后继
OtherType other; //内存块可能包含的其它的部分
}WORD,head,foot,*Space;
llink和uplink为什么要用union?有什么效果呢?
union是一种比较古老的写法了,这会让所有union的成员变量共享同一个内存空间。如果修改了成员变量其中的任何一个,都会导致另一个也随之变化。
也就是说,在这里,link和uplink在数值上是相同的。当本内存块为头结点的时候,就将这个union指向自己;否则,就将这个union指向他的直接前驱节点。可以通过判断每块节点指向的地址是否是自己,来判断当前节点是头结点还是其余节点。
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
公用内存,节省空间,在某些情况下使用也比较灵活
union
{
float fvalue;
short sValue;
int nValue;
}
你只是要存储一个值,但是值的类型需要另外判断,使用union的话就不用每种类型都增加空间的占用了。