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版
PREVIOUSC++ Primer Plus Chapter3