对typedef struct/union的理解

首先struct叫做结构体,union叫做联合体。

然后说说typedef的格式,以typedef struct为例。

typedef struct "3、此处可以添加一些内容"
{
	"1、此处可以添加一些内容"
}"2、此处可以添加一些内容"

上面描述了typedef struct有3个地方可以加入我们自定义的内容,下面按顺序描述

"第一部分可以加入一些定义比如"

typedef struct
{
	char data1;
	float data3;
	"以上相似类型都可以定义,但是在结构体内是不能赋值的"
	int *p;
	"指针也是可以定义的"
	signed ONE:8;
	signed :2;
	signed TWO:3;
	"这种类型表示直接为ONE分配8个位(一个字节)的空间,隔2个位后为TWO分配3个位的空间"
	struct data4;
	"假设已经存在一个结构体data4,那么可以在这定义该结构体,当然union也是同样的道理"
	void "函数""在C++中是允许在结构体中定义函数的,C语言不行"
}
"第二部分添加的内容作用类似于int这类定义的名称"

typedef struct
{
	char data1;
}NAME;

"比如上面定义的这个结构体,我们可以吧NAME当做定义使用,比如需要定义一个Name1为NAME类型的结构体"

NAME Name1;//如此即可
"第三部分作为该结构体的名称可选择是否填写"
"填名字的好处就在于我们可以其他结构体(包括本身)中放入这个结构体,比如"

typedef struct Name
{
	char data1;
	struct Name;
}NAME;

struct和union的定义格式相同,但他们的内存分配方式不同,我下面举个例子大家就理解了

typedef struct
{
	char data1;
	char Name;
}NAME1;

typedef union
{
	char data1;
	char Name;
}NAME2;

上例中data1和Name都用了1个字节的内存。

但是对于struct来说,data1使用的内存是0-7,Name使用的是8-15。

对于union来说data1和Name使用的内存都是0-7。

这就造成了一个结果:在struct中data1和Name的值都是独立存在的,但在union在对Name或data1赋值后会将data1或Name的值覆盖掉。

关于其他内存分配方面这里就不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值