【1】 结构体类型创建:结构体是存有相同或不同类型的变量的集合,结构体内成员变量不能为空。
struct Stu
{
char name[20];
int age;
char id[20];
};
在声明结构体的时候,可以不完全的声明。
struct //匿名结构体
{
int a;
char b;
}x;
有n个结构体就有n种类型,哪怕里面成员都一样。
结构体自引用方式:
struct node
{
int data;
struct node*next;//空间开辟长明确
};
重声明
typedef struct node
{
int data;
struct node* next;
}node;
【2】结构体初始化
struct stu
{
char name[15];
int age;
};
struct stu s={"zhangsan",21};
struct node
{
int data;
struct node*next;
}n1={10,NULL};
struct node n2={20,NULL};
【3】结构体内存对齐:
(1)结构体内存对齐是拿空间换时间的。
(2)编译器没有默认的对齐数,一般一个变量的对齐数就是它自身的大小。
(3)结构体总大小为最大对齐数的整数倍。
(4)第一个成员在与结构体偏移量为0的地址处。
(5)对齐:除了第一个变量,待放入变量的起始偏移量能整除对齐数,如果不对齐,让起始偏移量增大。
结构体传参传的是指针。
【4】位段:
(1)位段的成员必须是int ,unsigned int 或signed int 。
(2)位段的成员后边有一个冒号和一个数字。
(3)位段的空间上是按需要以4个字节或者1个字节的方式来开辟的。
struct A
{
int a:2;//比特位
int b:3;
int d:6;
}
【5】枚举 联合
enum color//枚举类型
{
RED=1;//枚举常量
BLACK;
YELLOW;
};
enum Coloor clr=RED;
使用枚举,一次性可以定义多个常量,防止了命名污染。
联合也是一种特殊的自定义类型,这种变量包含一系列的成员,这些成员公用同一块空间。每一个变量都共享空间,都是第一个成员。
联合的大小至少是最大成员的大小,也要考虑是否对齐。
int main()
{
union un//判断大小端
{
char a;
int b;
}Un;
Un.b=1;
printf("%d", Un.a);
system("pause");
return 0;
}
`