第四章 复合类型
复合类型:基于基本类型和浮点类型创建
4.1 数组
一、定义:
数组是一种数据格式,能够存储多个同类型的值。
二、数组声明:
条件:
- 存储在每个元素中的值的类型;
- 数组名;
- 数组中的元素数;
格式:
typename arrayname[arraysize];
注意:表达式arraysize指定元素数目,它必须是整型常数(如10)或const值,也可以是常量表达式(如8*sizeof(int)),即其中所有的值在编译时都是已知的。具体地说,arraysize不能是变量,变量的值是在程序运行时设置的。然而,可以使用new运算符来避开这种限制。
使用:可以单独访问数组元素。方法是使用下标或索引来对元素进行编码。c++数组从0开始编号。
有效下标值的重要性:如果将一个值赋给不存在的元素months[101],编译器并不会指出错误。但是程序运行后,这种赋值可能引发问题。
sizeof运算符:
注:sizeof运算符返回类型或数据对象的长度(单位为字节)。如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数。
三、数组的初始化规则
- 只有在定义数组时才能使用初始化,以后就不能使用了,也不能将一个数组赋给另一个数组;
- 然而,可以使用下标分别给数组中的元素赋值;
- 初始化数组时,提供的值可以少于数组的元素数目;
- 如果初始化数组时方括号([])为空,c++编译器将计算元素个数。
四、c++11数组的初始化方法:(新增功能)
- 初始化数组时,可省略等号(=);
- 可不在大括号内包含任何东西,这将把所有元素都设置为零;
- 列表初始化禁止缩窄转换;
stl提供了一种数组替代品——模板类rector,c++11新增了模板类array。
4.2字符串
一、c++处理字符串的方式:
①第一种来自c语言,常被称为c-风格字符串;
②另一种基于string类库的方法。
二、c-风格字符串
1、存储在char数组中。
2、特殊的性质:以空字符(null character)结尾,空字符被写作\0,其中ascii码为0,用来标记字符串的结尾。
3、字符串定义、赋值
① 大量单引号
char cat[4] = {'c','a','t','\0'};
②使用一个双引号括起来字符串,这种字符串被称为字符串常量或字符串字面值。
char bird[11] = "mr.cheeps"; char fish[] = "bubbles";
注意:字符串常量(使用双引号)不能与字符常量(使用单引号)互换。
‘s’是字符串编码的简写表示。在ascii系统上,‘s’只是83的另一种写法;
“s”实际上表示的是字符串所在的内存地址。
4、拼接字符串常量:
任何两个有空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。
注意:拼接时不会再被连接的字符串之间添加空格。忽视\0。
5、在数组中使用字符串:
要将字符串存储到数组中,最常用的两种方法:
①将数组初始化为字符串常量;
②将键盘或文件输入读入到数组中;
sizeof运算符指出整个数组的长度:15字节;但strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。(strlen()函数不把空字符计算在内。)
6、字符串输入的缺陷(cin)
①cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味cin在获取字符数组输入时只读取一个单词。
②输入字符串可能比目标数组长。
7、每次读取一行字符串输入
需要采用面向行而不是面向单词的方法。
istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。
区别:getline()将丢弃换行符,而get()将换行符保留在输入序列中。
a.面向行的输入:getline()
下一篇: 《吊打面试官》系列-HashMap