构造数据类型(C++)

[程序设计教程用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'结束&

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值