[程序设计教程用c++语言编程陈家骏]
一、枚举类型:基本数据类型的值集是由语言定义的,而枚举类型的值集由程序员定义,定义枚举类型时,需要列出值集中的每个值,格式:
enum <枚举类型名> {<枚举值表>};
或
enum {<枚举值表>} <变量表>; //省略类型名
枚举值为整形符号常量,
enum Day {SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
enum Color {RED,GREEN,BLUE};
第一个枚举值通常为0,第二个为1,依此类推,如果设置了其中某个值,后面值一次加1,定义变量格式:
<枚举类型名> <变量表>; //c++格式
或
enum <枚举类型名> <变量表>; //c格式
对枚举实施赋值操作:
Day d1,d2,d;
d1=SUN; //ok
d2=d1; //ok
d=RED; //error,不同枚举类型之间不能赋值
d=10; //error,Day中没有值与10对应
枚举值对应一个整数,可以把枚举值赋给一个整形变量,但不能把整形数赋给枚举类型变量,因为其中存在不安全因素,但可以通过强制类型转换把整形数赋值给枚举类型变量,但应保证该整形值属于枚举值集范围,否则没意义,可以对枚举类型值实施比较、算术运算,系统首先把它们转换为对应的整形值,然后运算,不能对枚举类型的值直接进行输入、输出,如:
d=(Day) 3; //ok
d=d+1; //error,d+1结果为int型
d=(Day) (d+1); //ok
cin>>d; //error
二、一维数组:一维数组数据,编译程序会在内存中分配连续存储空间,如果数组下标越界,C++不会检测,结果不可预知
1.数组别名定义:
typedef <元素类型> <数组类型名> [<元素个数>];
如:
typedef int A[10];
A a;
2.初始化:
int a[10]={1,2,3,4}; //不足部分初始化为0
int b[]={1,2,3}; //指出b有3个元素,初始值为1,2,3
3.向函数传递一维数组:调用者需要把一维数组变量的名以及数组元素个数传递给被调函数,被调函数形参为不带数组大小的一维数组定义以及数组元素个数,c++中,数组作为函数参数,传递的是数组首地址,形参不会再分配内存空间。如:
int fun(int x[], int num) //fun可以接受任意的元素类型为int的一维数组
{
……
}
int main()
{
……
int a[10],b[20];
fun(a,10);
fun(a,20);
……
}
三、字符数组:C++中通常用char的一维数组表示字符串,定义字符数组时,其元素个数比实际能存储的字符串最大长度多一个,用来存储字符串结束标记'/0',字符数组作为参数传递给函数时,只需传递数组名而无需字符个数,如
/*当用户输入超过9个字符时,程序会有问题,多余的字符会存储到不属于s的内存空间中,这些空间有可能是其他变量的存储空间,C++编译程序出于效率考虑不检查此类错误,设计者要考虑可能出现的这些问题*/
char s[10]; //s可以表示9个字符和'/0',
cin>>s;
for(int i=0;s[i]!='/0';i++)
{
if(s[i]>='a'&& s[i]<='z')
s[i]=s[i]-'a'+'A';
}
cout<<s<<endl;
初始化:
char s[10]={'h','e','l','l','o','/0'}; //显示加'/0'
char s[10]={"hello"}; //自动加'/0'
char s[10]="hello"; //自动加'/0'
char s[]="hello"; //自动加'/0'
C++标准库提供了对字符串操作的函数,在cstring或string.h中声明:
1.int strlen(const char s[]); //返回字符个数(不包括'/0')
2.char * strcpy(char dst[], const char src[]); //将src复制到dst,并在dst中加上'/0',如果src长度大于dst,结果有问题
size_t strlcpy(char *dst, const char *src, size_t dstsize); //从src复制至多dstsize-1个字符给dst,结果强制有'/0'结束&