目录
1.引入—枚举:
1.1常量符号化
·用符号而不是具体的数字来表示程序中的数字
1.2枚举
·用枚举而不是定义单独的const int变量
·枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明:
enum枚举类型名字{名字0,...,名字n};
·枚举类型通常只用大括号里的名字,它们就是常量符号,它们的类型是int,值从0-n
如:enum colors{red,yellow,green};
·当需要一些可以排列起来的常量值是,定义枚举的意义就是给了这些常量名字。
·枚举可以作为值
·枚举类型可以跟上enum作为类型
·但是实际上是以整数来做内部计算和外部输出的
·虽然枚举类型可以当作类型用,但是不好用
·如果有意义上排比的名字,用枚举比const int方便
套路:自动计数的枚举
·可用于遍历所有的枚举量或者简历一个用枚举量做下标的数组
1.3枚举量
·声明枚举量的时候可以指定值
·enum color{red=1,yellow,green=5}
·枚举只是int,即使给枚举类型的变量赋不存在的整数值也没有关系
2.结构类型:
2.1声明结构类型
·易犯错误:漏掉struct后面的分号
2.2结构类型声明的位置:
如图:结构类型的声明是在函数内部的,那么它只能在函数内部使用
一般情况下,结构类型一般在函数的外部声明,这样就可以被多个函数使用了
2.3声明结构的形式:
第一种:
·p1和p2都是point里面有x和y的值
第二种:
·p1和p2都是一种无名结构,里面有x和y
第三种:
·p1和p2都是point里面有x和y的值t
区别:第一和第三种都声明了结构point。但是第二种形式没有声明point,只是定义了两个变量
·2.4结构变量:
·声明了一种类型后,可以通过那种类型来定义变量,这种变量就叫做结构变量
比如图中的day,month,year就是三个结构变量
·2.5结构的初始化:
·与数组相同,结构也是用大括号来赋值
·赋值方式:
1) 直接在大括号内输入三个值,编译器会将三个值一次赋给三个变量
2) .变量名= 这样可以给你想赋值的变量附上值,没有赋值的变量默认为0
2.6结构成员:
·结构与数组相似
·数组用 [] 和 下标 访问其单元
·a[0] = 10
·结构用 . 和 名字 访问其成员
·today.day
·student.firstName
·pl.x
·pl.y
2.7结构运算:
·要访问整个结构,直接用结构变量的名字
·对于整个结构,可以做赋值、取地址,也可以传递函数参数
·pl = (sruct point){5,10}; //相当于pl.x = 5;pl.y = 10;
·p1 = p2; //相当于p1.x = p2.x;p1.y = p2.y
数组无法做这两种运算!
2.8结构指针:
·和数组不同,结构变量的名字并不是结构变量的地址,必须使用&运算符
·struct date *pDate = &today;
3.结构与函数:
3.1函数作为函数参数
·int numberOfDays(struct date d)
·整个结构可以作为参数的值传入函数
·这时候是在函数内新建一个结构变量,并复制调用者的结构的值
·也可以返回一个结构
·这与数组完全不同
3.2输入结构
·没有直接的方式可以一次scanf一个结构
·记住C在函数调用时永远都是传值的
·传入数组和传入结构是不同的
·将结构传入函数通常将结构指针作为参数
3.3指向结构的指针
·用->表示指针所指的结构变量中的成员
3.4结构指针参数
·先传入一个指针,在函数里面对指针所指的东西做了一定的处理
·如果将指针所指的东西应用完后,再将指针返回这样可以把一个指针串用在多个函数当中
·*可以取用一个函数的返回值,将它作为变量进行使用
3.结构中的结构:
3.1结构数组
·如图:初始化时出现了两层括号
第一层的意思是:开始初始化数组
第二层的意思是:为数组中的单元赋值
3.2结构中的结构
3.2嵌套的结构
·struct point{
int x;
int y;
};
struct rectangle{
struct point pt1;
struct point pt2;
};
如果有变量:
struct rectangle r;
就可以有:
r.pt1.x、r.pt1.y
r.pt2.x、r.pt2.y
如果有变量定义:
struct rectangle r,*rp;
rp=&r;
那么下面的四种形式是等价的:
r.pt1.x
rp->pt1.x
(r.pt1).x
(rp->pt1).x
但是没有rp->pt1->x(因为pt1不是指针)
3.3结构中的结构的数组
·如图:初始化时出现了两层括号
第一层的意思是:开始初始化数组
第二层的意思是:为数组中的单元赋值(这个单元也是结构)
第三层是:结构中的结构
4.类型定义:
4.1自定义数据类型(typedef)
·typedef 可声明一个已有的数据类型的新名字
typedef int Length;
使得 Length 成为 int 类型的别名。
·这样, Length 这个名字就可以代替int出现在变量定义和参数声明的地方了
Length a,b,len;
Length numbers[10];
4.2Typedef
声明新的类型的名字的好处:
·新的名字是某种类型的别名
·改善了程序的可读性
在 typedef 末尾的那个单词就是定义出的类型
5.联合:
5.1联合
·存储
·所有的成员共享一个空间
·同一时间只有一个成员是有效的
·union的大小是其最大的成员
·初始化
·对第一个成员做初始化
·与struct的区别:
struct中两个成员的值是截然分开,随时可以使用其中的任何一个
而对于union来说,所有成员都使用一个空间,一个成员使用了一个值,其他的则无法使用
5.2union的应用
可以通过这种方式得到一个各类型数字内部的各个字节
是我们用来做读写的一个媒介