首先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的值覆盖掉。
关于其他内存分配方面这里就不再赘述。