对typedef structunion的理解

it2023-04-09  77

首先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的值覆盖掉。

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

最新回复(0)