1.结构体
①什么是结构体?
答:结构体是一种可以将不同类型打包在一起的一种用户自定义类型。
②结构体怎样定义?
答:用关键字struct 来定义
例如:描述一个学生
struct Student {
char name[32]; //姓名
int age; //学号
char sex[5]; //性别
char id[20]; //学号
}stu;
注意:
1.再次定义变量时时可采用以下形式进行二次定义
struct Student a;
2.也可用以下形式定义
typedef struct Student {
char name[32]; //姓名
int age; //学号
char sex[5]; //性别
char id[20]; //学号
}stu;
此时再次调用可采取这种形式定义,如:
stu a;
③结构体的访问
stu.age=22;//将22赋值给stu中的age
④结构体的自引用
结构体可以在其内部成员内定义自己的指针,如:
struct Student {
int data;
struct Student *next;
};
这样在访问结构体内部成员的next时 ,可通过它来访问到下一个相同类型的结构体。
⑤结构的初始化
结构体的初始化和数组初始化有一定的相似程度,都可以用“{初始化内容,初始化内容}”多个初始化数据之间用“,”隔开。如
typedef struct Student {
char name[32]; //姓名
int age; //学号
char sex[5]; //性别
char id[20]; //学号
}Stu;
int main() {
Stu student1 = { "zhangsan",22,"男","123456" };
system("pause");
return 0;
}
结构体中又有结构体怎么办?
我们可以采取 {} 里面套 {} 的方式
typedef struct point {
int x;
int y;
}Point;
typedef struct node {
int data;
Point b;
}Node;
int main() {
Node a = { 2017,{1,2} };
system("pause");
return 0;
}
⑥结构体内存对齐
⑦结构体传参
结构体传参时与数组不同,编译器会直接将拷贝到函数的临时变量中。如果结构体里面含有很大的数组,那么这个结构体会占用很大的空间,所以结构体传参建议传指针。
2.联合体
①联合体是什么?
联合体成员是共用一块内存空间的,这样一个联合体变量大小,至少是最大成员大小。
②定义方式
union Un {
int a;
char b;
}un;
③特点
1.所有内部成员共用一块内存大小。因此我们在给un.a赋值以后,b的值也可能会发生改变。如:
union Un {
int a;
char b;
}un;
int main() {
un.b = 0;
un.a = 1;
printf("%d\n", un.b);
system("pause");
return 0;
}
在这里我们得到的un.b的值最终为1,虽然给un.b赋的初值为0,但是给un.a赋值时也将属于两个变量的共同内存赋值。此处计算和大小端有关,就不赘述了。
3.位段
①什么是位段?
位段和结构体是类似的,有两个不同
1.位段成员必须是整形家族int,unsigned int.
2.位段成员名后面必须有一个冒号和一个数字。冒号后面的数字代表这个变量所占的bit位大小。
3.它使用压缩空间的做法,如果该字节剩余空间还能够达到存放下一个变量的大小,则将下一变量存放至该字节。
如:
struct A {
int a : 2;
int b : 5; //前两个占1个字节
int c : 10; //2字节
int d : 30; //4字节
};
A所占空间大小为1+1(使c对齐)+2+4,为8.
4.枚举
①枚举是什么?
顾名思义就是一一列举,把可能的值一一列举。比如现实生活中:一个周有7天,,性别有:男女,一年12个月,这些都可以一一列举出。
②枚举的定义
enum week {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Satturday,
Sunday
}week1;
注意:
1.用week定义的结构体尽量只用其中的变量名赋值,否则就没有意义
2.其中变量的成员还是整形
3.如果不指定美剧内的成员初值的话,会默认依次从0开始递增,若只给中间某一成员赋初值,则所赋值成员之前的成员规则不变,之后的成员以被赋的的值依次递增1.
③枚举的优势
1.增加代码的可读性和维护性,
2.和#define相比枚举有检查,更严谨。
3.防止命名污染(封装)
4.便于调试
5.使用方便,一次定义多个常量