第4章——复合类型

 

l         数组

只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组

int cards[4]={3,6,8,10};

如果只对一部分数组初始化,则编译器把其它元素设为0;

float hoteltips[5]={5.0,2.5};

还有一种方法(不推荐)

short things[]={1,5,3,8};

l         字符串

C++处理字符串的方式有两种:第一种来自C语言。第二种基于string类库的方法

将数组初始化为字符串简单方法

char fish[] = “bubles”;

用引号括起的字符串隐式地包括结尾的空字符,因此不用显式地包括它。各种C++输入工具通过键盘输入,将字符串读入到char数组中,将自动加上结尾的空字符。C++对字符长度没有限制。

在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。

 

有时候,字符串太长,无法放到一行中,C++允许拼接字符串常量,即将两个用引号括起的字符串合并为一个。

cout<<”I’d give my right arm to be a great violinist.\n”;

cout<<”I’d give my right ar”

“m to be a great violinist.\n”;

 两者等效。

 

sizeof 操作符测出整个数组的长度。strlen()返回的是数组中字符串的长度。因为字符串没有也不会填满整个数组,所以strlen()函数返回的值要小于sizeof()返回的值。

 

输入字符串

cin工具使用空白(空格、制表符、换行符)来确定字符串的界,并自动在结尾添加空字符。这就意味着cin在为字符数组获取输入时,只能得到一个单词。而不能是一句话。解决这个问题,可以使用两个方法:

n         cin.getline(数组名,要读取字符数+1),函数读取输入后,丢弃换行符。如果getline()直接遇到一个换行符,将返回一个空值。

n         cin.get(数组名,要读取字符数+1),它读取输入后,将换行符保留在输入序列中。因此,实际的解决方案应该是这样:cin.get(name,size).get();之所以能这样写是因为第一个get()函数会返回一个cin对象。没有参数的get()函数将读取换行符。

 

通过几个例程,可以分析得出:cin会将所有的输入放在一个输入队列中,包括换行符。以空白作为元素(字符串,整数或字符)的间隔。只使用cin向数组中一次只释放输入队列中的一个元素,如果cin后有其它函数方法,则视方法而定。存取的顺序是从上一次释放元素的下一个位置开始。

l         string类

要使用string类,必须在程序中包含头文件string。string类位于名称空间std中。

使用:string str;

       string str2;

str=”panther”;

str[2]=’d’;

str2 =str;

str2=str2+str;

str2 +=str;

int len;

len=str.size();

输入字符:getline(cin,str);

l         结构简介

结构体定义

struct perks

{

       int key_number;

       char car[12];

}mr_smith,ms_jones;

创建结构,同时定义变量;

还可以省略perks,但是这种使用方法不提倡。在结构成员中还可以嵌入如下对象

std::string name;但是这要依赖于编译器。低版本的编译器不支持。mr_smith,ms_jones可以使用成员操作符(.)来访问各个成员。

mr_smith,可以是数组,初始化时如perks mr_smith[2]={{},{}}

结构体中也允许有位字段。

l         共用体(union)

l         枚举(enum)

在默认情况下,将整数值赋给枚举量。第一个枚举量为0,第二个枚举量为1,依次类推。初始化时,没有初始化的枚举量比其前面的枚举量大1.枚举量可以是long型的。C++中通过强制类型转换,可以将取值范围中的任何整数赋给枚举变量。

n         上限:大于枚举量中最大值的最小的2的幂,然后减1

n         下限:如果枚举量都大于0则0为下限。否则找到小于枚举量中最小的2的幂(负数)然后加1

枚举量,只定义了赋值操作符。如果一定要运算,是将枚举量转化为整形后计算的。可以将整型通过强制类型转换赋给枚举变量

l         指针

int *p1,p2;

意思是创建一个指针(p1),和一个常规int变量(p2).

int *p1是C程序员风格;int* p2是C++程序员风格。这对编译器来说没什么区别。

C99标准中不允许将数值直接赋给指针。可以通过强制类型转换实现:

int *ptr;

ptr=(int *)0xB8000000;

 

new可以在运行时分配内存。获得并指定分配内存的通用格式:

typename pointer_name =  new typename;

new和delete配对使用;new[]和delete[]配对使用。

在cout和多数C++表达式中,char数组名,指向char的指针以及用引号括起的字符串常量都被解释为字符串第一个字符的地址。要打印一个字符串,只需要向cout传递一个字符串首地址即可。

new创建的动态结构,因为没有结构名称,只有结构指针。引用成员时使用箭头(->)成员操作符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值