AutoLeaders控制组——C语言结构类型学习笔记倪文健
11.1.1枚举
常量符号化:用符号而不是数字表示程序中的数字,增加程序可读性。
枚举是一种用户定义的数据类型,用enum以如下语法来声明:
enum 枚举类型名字{名字0,…,名字n};
类型只能是int
枚举量可以作为值
枚举类型可以跟上enum作为类型
实际是以整数来做内部计算和外部输出的
在枚举的最后放一个计数器cnt,当需要遍历枚举量或建立一个用枚举量做下标的数组时就很方便了。如:
enum color {red,yellow,blue,cnt};
char *COLOR[cnt]{“red”,“yellow”,“blue”}
声明枚举量可以指定值。
枚举通常用于有意义上排比的名字,比const int 方便
枚举比宏(macro)好,因为枚举有int类型
11.2.1结构类型
声明结构类型:struct 名字{};要有";"
如果在函数内部声明,就只能在函数内部使用。所以通常在函数外部声明结构类型。
struct point{
int x;
int y;
};
struct point p1,p2;
p1,p2都是point,里面有x,y的值。也可以:
struct point{
int x;
int y;
}p1,p2;
结构初始化:struct point p1={1,2}
或者struct point p1={.x=1,.y=2}
结构用.运算符和名字访问其成员:p1.x;p1.y
j结构运算:
访问整个结构,可以直接用结构变量的名字
对于整个结构,可以做赋值,取地址,传递给函数参数
p1=(struct point){5,10}//相当于p1.x=5,p1.y=10
p1=p2;//相当于p1.x=p2.x;p1.y=p2.y
结构变量名字不是地址,要用&取地址
struct date *pDate=&today;
11.2.2结构与函数
整个结构可以作为参数的值传入函数:int num(struct date d)
这是在函数内新建一个结构变量,并复制调用者结构的值
没有直接的方式可以一次scanf一个结构
函数只返回值,不修改原函数的结构变量
给结构变量赋值:
拷贝整个函数:
通过指针:
11.2.3结构中的结构
结构数组:
struct time {
int hour;
int min;
int second;
};
struct time now[3]{
{11,59,59},{12,0,0},{1,29,59}
}
结构中的结构:
结构中的结构的数组:
11.3.1类型定义
自定义数据类型(typedef):
typedef int Length;
Length即可代替int使用
作用:
改善了程序可读性。简化了复杂的名字,重载已有类型名字,新名字含义更清晰。
如:
typedef struct time {
int hour;
int min;
int second;
} time;
11.3.2联合
union q{
int i;
char c;
}e1,e2;
e1.i=4;
e2.c='a';
i和c联合起来使用一个空间
存储:
所有成员共享一个空间,同一时间只有一个成员有效,union的大小是其最大的成员
初始化:
对第一个成员做初始化
常用场合:得到一个整数内部各个字节