结构类型
# 结构类型
# 3.1枚举
- 常量符号化:增加代码可读性,用名称代替固定的数字常量
- 枚举类型:
enum name{elem1,elem2,elem3};
,枚举量都是int
- 自动计数的枚举:
enum name{elem1,elem2,elem3,len};
其中len
的值可以直接作为枚举类型的枚举量个数及其长度 - 枚举的作用:声明有排比意义的符号化常量,枚举比
const int
更加方便
# 3.2结构体
结构体的声明:结构体是抽象的,结构变量是实体
//有名结构体 struct date{ int year; int month; int day; }; struct date today = {2019,11,29};//初始化 struct date today = {.month=11,.day=29};//用this指针部分初始化,未赋值给0 //无名结构体 struct { int month; int day; }day1,day2; day1.month = 11; day1.day = 27; day2.month = 11; day2.day = 28; //有名结构体,并声明结构体变量 struct date{ int year; int month; int day; }today; today.year = 2019; today.month = 11; today.day = 29;
结构体的运算
3.2.1.c
直接用结构变量名字访问
整个结构可以赋值,取地址也可以传递函数参数
p = (struct date){2019,11,29};
p1 = p2;
结构体的指针:结构变量的名称不是其地址,需要
&today
来取地址。
结构体与函数
结构体作为函数参数
int numberOfDays(struct date d){}
,3.2.2.c
- 结构体可以作为形式参数传入函数,在该函数内结构体变量被拷贝
- 函数可以返回一个结构变量
结构体作为输入:不像数组一样传值也传地址,结构体变量只传值
结构体输入并返回
在函数内创建一个临时的结构体变量,将改变的值通过临时变量返回
struct date getStruct() { struct date p; scanf("%d",&p.x); scanf("%d",&p.y); return p; }
通过指向结构的指针,传地址:用
->
表示指针所指向的结构体变量的成员struct point* getStruct(struct point *p) { scanf("%d",&p->x); scanf("%d",&p->y); return p; }
结构体中的结构体
- 结构体数组
- 结构体中的结构体
- 结构体中的结构体的数组
# 3.3类型
自定义数据类型:使用
typedef
声明一个已有的数据类型的新名字使用
typedef
定义结构体的别名 :typedef oldname newname;
typedef struct Date { int month; int day; int year; }; Date d = {2019,11,27};
union
共享存储空间的结构体
上次更新: 2023/11/19, 12:55:48