全部博文(82)
分类: C/C++
2009-12-07 20:35:31
构造数据类型:数组、枚举、结构体、共用体和用户自定义类型。
² 数组:
具有相同数据类型的元素序列。在内存中,占据一组连续的内存位置。
每一项都是一个变量,称为元素。
对于全局或static存储类别(指定静态数组)的数组不足部分的数组元素系统自动以0填充。
初始化形式的合法形式:
Static int a[3]={1,2,3}; //初始化三个数组元素
Static int a[10]={4,5}; //只初始化前两个元素,其它元素等于0
Static int a[] = {1,2,3,4}; //数组大小由初始化值个数确定,因而数组大小为4
字符数组(每个元素均为单个字符)可以用多个字符或一个字符串初始化,需注意的是,字符串以空字符NULL(‘\0’)结尾,因而也占据一个数组元素的位置。
Char ca[] = {'a','b','c','d'}; //定义了大小为4的字符数组
Char ca[] = "abcd"; //定义了大小为5的字符数组,注意字符串以'\0'结尾
Char ca[4] = "abcd"; //错误,数组大小(4)小于初始化值的个数(5)
C++不支持数组间的直接赋值,因而只能一个一个的赋值。
For(i = 0; i < 20; i++) B[i] = A[i];
² 枚举类型:
定义了一些整型符号常量的集合,其格式如下:
Enum 类型名 {标示符1,标示符2,...,标示符n};
其中,标示符1 至标示符n 表示一些整型符号常量,默认由系统赋予整数值:
标示符1 的值为0,标示符2 的值为1 ,...
序列中每个标示符的值比前一个标示符大1.
也可以自己定义标示符的值,定义方式是直接在定义语句的标示符后赋值。那些没有显示赋值的枚举值还是比前一个标示符值大1,例如:
Enum Color {red = -2, Yellow, Green = 2,Blue};
这样:red = -2, Yellow = -1, Green = 2 ,Blue = 3
Enum Day {Mon, Tue , Wed , Thu , Fri , Sat ,Sun}; //定义一个枚举类型Day
Enum Day today, tomorrow; //定义2个枚举变量
则有:
Today = Mon; //合法,today 值为0
Tomorrow = today; //合法,tomorrow 值为0
Int n = today; //合法,n 值为0
Tomorrow = 3; //不合法,不能直接赋值整数值
² 结构体类型:
声明格式:
Struct [结构体名] //结构体类型声明
{
成员类型 成员1;
成员类型 成员2;
...
成员类型 成员n;
}[结构体变量名]; //结构体变量定义
结构体名 和 结构体变量名 都可以省略。省略前者表示声明了一个无名结构体类型和定义了具有该类型的变量,省略后者表示仅仅声明了一个结构体类型。
ü C++中对C的结构体有了扩展。结构体变量可以和类一样使用:结构体除了可以包含数据成员外,可以包含成员函数;成员也可以加上public,private 和protected的访问控制;结构体之间可以继承。
不同之处:结构体中的成员默认是公有的,结构体的继承默认也是公有的,而类是私有的。
² 共用体结构:
各个成员共享一块内存。任意时刻只能有一种数据类型的变量是活跃的。
Union 共用体名
{
成员类型 成员1;
成员类型 成员2;
...
成员类型 成员n;
}[共用体变量名];
和结构体一样,共用体也是类的特例,特殊限制:共用体不能继承,不能有静态成员变量;具有构造或析构函数的对象不能是共用体的成员;重载了赋值运算符 “=”的对象不能是共用体的成员等。
² 用户自定义类型:
Typedef 类型声明;
Typedef int Width;
Typedef char String[10]; //定义了新类型String,它是一个字符数组
String name; // 等价于char name[10];