C++ Primer Plus Chapter4

Chapter4 复合类型

数组

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

初始化数组时,提供的值如果少于数组的元素数目,其他的元素会被初始化为0

// C++11 数组初始化方法

// 初始化数组时,可省略 "="
double earning[4] {1.2e4, 1.6e4, 1.1e4, 1.7e4};

// 可不在大括号内包含任何东西,这将把所有元素置为0
int counts[10] = {};

// 列表初始化禁止缩窄转换
long plifs[] = {25, 92, 3.0} // not allowed
char slifs[4] {'h', 'i', 1122011, '\0'} // not allowed

枚举

在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量

enum spectrum {red, yellow, blue}

spectrum band;
band = blue; // valid
band = 2000; // invalid

对于枚举,只定义了赋值运算符。

enum spectrum {red, yellow, blue}

spectrum band;

++band;	// invalid
band = red + yellow; // invalid

可以使用赋值运算符显示定义枚举的值

// 对于没有被显示初始化的枚举量,它的值比前面的枚举量大1
enum spectrum {red, yellow = 100, blue}  // red = 0, yellow = 100, blue = 101

枚举量的取值范围:

枚举量的上限:大于其最大值的最小的2的幂减1

枚举量的下限:如果其最小值大于等于0,那么下限为0;如果其最小值小于0,那么下限为大于其最小值的最小的2的幂减1再加上负号

指针

在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。因此一定要在对指针应用接触引用运算符(*)之前,将指针初始化为一个确定的、适当的位置。

为一个数据对象获得并指定分配内存的通用格式如下:

typeName * pointer_name = new typeName;

对于指针,new 从堆或自由存储区分配内存,而变量声明则从栈中分配内存

使用delete释放内存时,不会将指针本身删除,可以将指针重新指向另一个新分配的内存块。

参考书目C++ Primer Plus 第6版