数组
long totals[500] = {0};
该语句的意思是,显式的把第一个元素初始化为0,编译器自动把其他元素都初始化为0。
long totals[500] = {1};
该语句的意思是,第一个元素初始化为1,其他元素都初始化为0。
- 注意:对数组取地址时,数组名也不会被解释为其地址。数组名被解释为其第一个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址。
short tell[10];
cout << tell << endl;
cout << &tell << endl;
- 从数字上说,这两个地址相同;但从概念上说,&tell[0](即tell)是一个2字节内存块的地址,而 &tell 是一个20字节内存块的地址。因此,tell+1 是将地址值加 2,而 &tell+1 是将地址加20。
字符串
"S"
不是字符常量,他表示的是两个字符(字符 S 和 \0)组成的字符串。
'S'
是字符常量,注意,字符串常量(双引号)不能与字符常量(单引号)互换!
cin >>
cin
使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin
在获取字符数组输入时只读取一个单词。读取该单词后,cin
将该字符串放到数组中,并自动在结尾添加空字符(\0)
- istream 中的类提供了面向行的类成员函数
- 面向行的输入: getline()
该函数读取整行,它通过回车键输入的换行符来确定输入结尾。
使用cin.getline(数组名,要读取的字符数num)
调用,最多读取 num-1 个字符,自动在结尾处添加空字符。 - 面向行的输入:get()
使用cin.get(数组名,要读取的字符数num)
读取字符串,或者使用cin.get()
读取一个字符。
get并不再读取并丢弃换行符,而是将其留在输入队列中。 - get() 与 getline() 区别
get() 可以知道停止读取的原因,通过查看下一个输入字符,如果是换行符,说明已读取了整行,否则,说明该行中还有其他输入。 - 空行
当 get() 读取空行时,将设置失效位(failbit),这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输入:cin.clear()
当 getline() 读取空行时,下一条输入语句将在前一条 getline() 结束读取的位置开始读取。 - 输入的字符串比分配的空间长
get() 和 getline() 将把余下的字符留在输入队列中,getline() 还会设置失效位,并关闭后面的输入。
- 面向行的输入: getline()
string 类
- string 类 位于命名空间 std 中,因此必须提供一条 using 编译指令。
- 当然还需要
#include <string>
- 可以使用 ‘+’ 将两个 string 对象合并
结构体
- 成员赋值
- 可以用
=
将结构赋给另一个同类型的结构,这样结构中每个成员都将被设置为另一个结构中相应成员的值,即使成员是数组。
- 可以用
共用体
共用共用,从字面上理解就是共同占用一段内存单元。
所以,共用体能存储不同的数据类型,但只能同时存储其中的一种类型。因此,共用体的长度为其最大成员的长度。
枚举
C++的enum
提供了另一种创建符号常量的方式,其句法与使用结构类似。
enum spectrum {red,orange,yellow,green,blue,violet,indigo,ultraviolet=7};
- 概念
- spectrum 是一种新类型→枚举类型
- red、orange、yellow 等是符号常量,被称作枚举量,对应整数值 0~7。默认情况下,第一个枚举量的值为0,第二个为1,以此类推,也可以显式地指定整数值来覆盖默认值。
- 注意:后面没有被初始化的枚举量的值将比其前面的枚举量的值大1。
- 枚举量是整型,可被提升为 int 类型,但 int 类型不能自动转换为枚举类型。
- 枚举的取值范围:
- 上限:
找到大于枚举量的最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。如,x 的最大枚举值是101,在2的幂中,比这个数大的最小值为128,因此取值范围的上限是127。 - 下限:
找到枚举量的最小值。如果它≥0,则下限为0;否则,采取与找上限相同的方式,但加上负号。如,最小枚举量为-6,比他小的、最大2的幂是-8,所以下限为-7。
- 上限:
- 存储空间:
由编译器决定。对于取值范围较小的枚举,使用一个字节或更少的空间;对于包含 long 类型的枚举,使用4个字节。
- 作用域内枚举
- 几个枚举定义中的枚举量可能发生冲突(当名称相同时)。这时可以用作用域解析运算符(::)解决,定义时可以这样
enum class egg {Small,Medium,Large};
enum struct t_shirt {Small,Medium,Large};