学习目标:
必备Linux命令和C语言基础
学习内容:
1、用户自定义数据类型--结构体 2、用户自定义数据类型--共用体 3、用户自定义数据类型--位域 4、用户自定义数据类型--枚举
学习时间:
1day
学习产出:
二十七、用户自定义数据类型--结构体
1、结构体
*结构体的定义
struct 结构体名{
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
};
*结构体的成员含结构体类型
*结构体的成员含结构体类型和联合体类型;
*结构体类型是用户自定义类型;
*它由若干不同的基本的数据类型的数据构成;
*是一种数据类型;
2、结构体变量的申明、使用和初始化
*声明:
*先定义结构体类型,再定义变量名;
*在定义类型的同时定义变量;
*直接定义结构体变量
*使用:
*不能将一个结构体类型变量作为一个整体加以引用,只能对结构体类型变量中的各个成员分别引用;
*如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级的找到最低的一级成员;只能对最低级的成员进行赋值和存取以及运算;
*对成员变量可以向普通变量一样进行运算;
*在数组中,数组不能彼此赋值,而结构体类型变量可以相互赋值;
3、结构体变量的初始化
*格式:
struct 结构体名 变量名={初始化数据表};
4、结构体数组
*定义:
结构体数组是一个具有相同结构体类型的结构体变量的集合;
*先定义结构体类型,再定义结构体数组;
*定义结构体类型的同时,定义结构体数组;
struct 结构体名{
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
}数组名[数组元素个数];
*直接定义结构体数组;
struct {
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
}数组名[数组元素个数];
5、结构体数组的初始化
*定义后初始化;
struct 结构体名{
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
};
struct 结构体名 数组名[元素个数 ]={初始化列表};
*定义同时初始化;
struct 结构体名{
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
}数组名[数组元素个数]={初始数据表};
*直接定义并初始化;
struct {
数据类型 成员名1;
数据类型 成员名2;
...
数据类型 成员名n;
}数组名[数组元素个数]={初始数据表};
6、结构体数组的使用
*引用某一元素的成员
*可以将一个结构体数组元素赋值给另一个同类型的结构体;
*不能把结构体元素作为一个整体直接进行输入和输出;
7、结构体指针
*格式:
struct 结构体名 *结构体指针名;
*指向一个结构体的指针指向该指针;
二十七、用户自定义数据类型--位域
1、位域的定义
*位域又称为位段,是将一个字节的二进制位划分为几个不同的区域,并说明每个区域的位数;
2、格式:
struct 位域结构体名
{
位域列表;
};
位域列表的格式:
类型说明符 位域名 :位域长度;
3、注意事项
*各位域必须存储在同一个字节中,不能跨两个字节。
*位域的占用位数,不能超过8个二进制位;
*允许位域无域名;
4、位域变量的说明:
*先定义为位域类型,再申明变量;
*定义位域类型的同时,申明变量;
*直接定义位域类型的变量
5、位域的使用
和结构体成员使用方法相同;
二十八、用户自定义数据类型--共用体
1、格式:
union 共用体名{
成员列表;
};
*存储时按照成员中数据长度最长的成员占用空间;
2、一次只能使用其中之一;
二十九、用户自定义数据类型--枚举
1、格式:
enum 枚举名{枚举成员列表};
2、枚举变量的申明
*先定义,再申明;
*在定义类型的同时,申明变量;
*直接定义无名枚举变量;
3、枚举变量的使用:
*一旦定义枚举变量,不能再对其变量进行赋值了;
*使用时,直接将枚举名赋给变量