枚举类型
一、适用范围
当一个变量只有几种可能的取值的时候就可以使用枚举类型来定义。
二、使用规则
1、建立枚举变量之后要对枚举变量实施赋值,其值要求为同一枚举类型。
2、如果类型不一致需使用强制装换成同类型的枚举常量赋值给枚举变量。
3、枚举常量、枚举类型的变量可直接进行各种形式的关系运算。
4、枚举常量是常量,不是变量,所以不能对枚举常量进行赋值。
三、表达式格式
enum 枚举类型名 {枚举常量1,枚举常量2,。。。,枚举常量n};
数组
数组指的是一组在内存中一次连续存放的、具有同一类型的数据变量所组成的集合体。
一、一维数组
1、格式:
定义: 数据类型 数组名[常量表达式];
初始化:数据类型 数组名[常量表达式]={初值1,初值2,。。。,初值n};
2、数组的地址:
对于数组a[n]数组地址为:a+n*sizeof(int)
二、二维数组
1、格式:
定义:数据类型 数组名[常量表达式2] [常量表达式1];
(其中常量表达式1为第1维元素的个数,常量表达式2为第2维元素的个数)
初始化:数据类型 数组名[常量表达式2] [常量表达式1]=初值表;
2、注意:
每一维的初值数不能超过对应维元素的个数;
只有最高维元素的个数能省略;
3、内存中的地址计算公式:
a[i][j]的排列位置=第1维大小n*+j+1;
a[i][j]的地址=a的起始地址+(第1维大小n*i+j)*sizeof(数据类型)
三、注意:
下标表达式的值从0开始
只有在定义数组时进行初始化才能省略数组的大小。
不能降一个数组整体复制给另一个数组。
指针
用于存放内存单元地址的变量类型。
一、格式
1、定义:
数据类型 * 变量名;
2、初始化:
数据类型 * 指针变量名=初始地址表达式;
二、注意
1、不能将一个非地址变量、变量以及无意义的实际地址赋值给指针变量表达式;
2、当使用一个已初始化的指针去给另一个指针赋值时,类型必须一致;
3、void类型指针可以存储任何的类型地址,但是将一个void类型的地址赋值给非void类型的指针变量,要使用类型强制转换。
三、指针运算
指针的运算实际上就是地址的运算,有赋值、取值、算术、相减、比较等运算。
1、*运算:用来定义指针变量,表示访问指针所指对象的内容。
2、&运算:用来使得到地址的类型与作用的变量类型相同,表示取变量的地址
四、指针与数组
1、指针数组:以指针变量为元素的数组且指针数组的每一个元素都是统一类型的指针变量,必须先赋值再引用。
格式:类型名 * 数组名[下标表达式];
2、数组指针:指向数组的指针,在给数组指针赋值时类型要匹配。
格式:类型名(*指针名)[下标表达式];
五、指针常量与常量指针
1、指针常量
特点:指针前使用const修饰;
被定义的指针是一个指针类型的常量。
格式:数据类型 * const 指针名=变量名;
2、常量指针
特点:数据类型前使用const修饰;
被定义的指针变量就是指向常量的指针变量。
格式:const 数据类型 * 指针变量=变量名;
或
数据类型 const *指针变量=变量名;
结构与联合
一、结构
不同数据类型组合成的一个整体类型。
1、特点:关键字为struct;
所占内存的大小是各个成员所占内存大小之和;
2、格式:
struct 结构类型名
{
数据类型1成员名1;
数据类型2成员名2;
。。。
}
使用:结构类型名 结构变量名={成员名1的值,成员名2的值,。。。成员名n的值};
3、注意:初始化结构变量时成员值表中的顺序要与定义时的顺序相同;
定义结构变量后每个成员只能单独初始化。
二、联合
是一种与结构类型类似的数据类型,可以将几种不同类型数据存放于同一段内存 。
1、特点:关键字为union;
所占内存大小为各个成员所占内存大小的最大值。
2、格式:
union 结构类型名
{
数据类型1成员名1;
数据类型2成员名2;
。。。
}
使用:结构类型名 结构变量名={成员名1的值,成员名2的值,。。。成员名n的值};
3、注意:内存排列从低地址开始,遵循“低地址低字节,高地址高字节”的原则。