第四章 复合类型

复合类型:基于基本类型和浮点类型创建

4.1 数组

一、定义:

数组是一种数据格式,能够存储多个同类型的值。

二、数组声明:

  条件:

  1. 存储在每个元素中的值的类型;
  2. 数组名;
  3. 数组中的元素数;

  格式:

  

typeName arrayName[arraySize];

  注意:表达式arraySize指定元素数目,它必须是整型常数(如10)或const值,也可以是常量表达式(如8*sizeof(int)),即其中所有的值在编译时都是已知的。具体地说,arraySize不能是变量,变量的值是在程序运行时设置的。然而,可以使用new运算符来避开这种限制。

  使用:可以单独访问数组元素。方法是使用下标或索引来对元素进行编码。C++数组从0开始编号。

  有效下标值的重要性:如果将一个值赋给不存在的元素months[101],编译器并不会指出错误。但是程序运行后,这种赋值可能引发问题。

  sizeof运算符:

  注:sizeof运算符返回类型或数据对象的长度(单位为字节)。如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数。

三、数组的初始化规则

  1. 只有在定义数组时才能使用初始化,以后就不能使用了,也不能将一个数组赋给另一个数组;
  2. 然而,可以使用下标分别给数组中的元素赋值;
  3. 初始化数组时,提供的值可以少于数组的元素数目;
  4. 如果初始化数组时方括号([])为空,C++编译器将计算元素个数。

四、C++11数组的初始化方法:(新增功能)

  1. 初始化数组时,可省略等号(=);
  2. 可不在大括号内包含任何东西,这将把所有元素都设置为零;
  3. 列表初始化禁止缩窄转换;

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()

posted @ 2019-12-16 20:28  Oafz的博客  阅读(193)  评论(0编辑  收藏  举报