1.结构体
结构体类型创建
struct Student //定义学生结构体
{
//结构体成员变量
char name[20];
int age;
char gender[5];
}s; //分号不能丢,s为结构体类型
结构体成员访问:"."
struct Student
{
char name[20];
int age;
char gender[5];
}s;
int main()
{
Student s;
strcpy(s.name,"sss");
return 0;
}
访问指向一个指向结构体变量的指针
struct S
{
char name[20];
int age;
};
void printf(struct S *ps)
{
printf("name = %s age = %d\n",(*ps).name,(*ps).age);
printf("name = %s age = %d\n",ps->name, ps->age);
结构体自引用
//类型重命名使用 typedef
typedef struct Node
{
int data;
struct Node* next ; //struct不能省略
}Node;
结构体变量的定义与初始化
struct S
{
int x;
int y;
};
struct S s;
struct S a = {1,2};
结构体传参:结构体传参时,参数需要压栈,开销较大,所以选择传址
2.枚举
默认从0开始,一次递增1,也可赋初值
枚举的特点:
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较枚举有类型检查
3.封装
4.便于调试
5.使用方便,可定义多个常量
enum Day
{
Mon, //使用,不是;可以直接赋值 Mon = 1,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun //最后不加,
}; //;不能丢
3.联合
定义:也被称为共用体,是一种构造类型,在一个联合类型内可以定义多种不同的数据类型,在一个被说明为该联合类型的变量中,各个成员共享同一个存贮空间。
union Un
{
char c;
int i;
};
union Un un;
int main()
{
printf("%d\n", sizeof(un)); //4
return 0;
}
联合的特点
联合的成员是共用一块内存空间,这样一个联合体的大小,至少是最大成员的大小。
大小计算:
当最大成员不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。