结构体与联合

1 struct +结构体名 +{成员表列};
比如:struct student
{
char name[32]; //不能写成char name[32]={0}
int age;
char sex;
};
2 定义结构体变量:struct student s1;
3 初始化结构体变量:struct student s2 ={“aaa”, 21, ‘m’};
4 打印结构体变量(逐个打印):printf("%s %d %c\n", s1.name, s1.age s1.sex); //通过结构体变量访问结构体成员用符号点“ . ”来进行
5 赋值结构体变量:
strcpy ( s1.name ,“b”);
s1.age = 20;
s1.sex = ‘m’;
6 关于虚拟内存的一些知识用图片的方式更加直观得呈现给大家:
结构体与联合
7 结构体指针:
struct student *s3
s3 = (struct student *)malloc(sizeof(struct student));
strcpy (s3 -> name, “ccc”);
s3 -> age = 25;
s3 ->sex = ‘m’;
printf("%s %d %c\n", s3 -> name, s3 -> age, s3 -> sex);
scanf("%s", s1.name); //s1在上述中提及,本次直接拿来用,不到之处请多多包涵
scanf("%s", s3 -> name);
scanf("%d", &s3 -> age);
free(s3); //释放malloc申请的空间
8 结构体长度:
struct test
{

}
typedef struct test T;
printf("%d\n",sizeof(T));
//结构体总长度一定是最长成员的整数倍;
//每个成员的偏移量一定是该成员长度的整数倍;
//其中double…的偏移量以4来计算;
9 结构体数组及结构体数组指针:
结构体与联合
10 联合体 union:
//联合体的特点是所有成员共享同一段内存;
//联合体的长度是最长成员的长度;
union test
{
int a;
int b;
char c;
};//长度为4个字节;

关于大小端字节序的问题,同样用图片给大家分享:
结构体与联合
11 枚举:
当我们在预处理阶段需要定义过多变量是情况如下:
#define aa 0
#define bb 1
#define cc 2
#define dd 3
#definr ee 4
如此太过于繁琐,我们可以这样:
enum
{
aa
bb
cc
dd
ee
}
//默认aa = 0,依次递增;
当变量不是递增是也可以如此:
enum
{
aa = 3
bb = 5
cc = 18
dd //dd此时等于19
ee = 100
ff // ff = 101
}