第四章 数组和指针
1.列出使用数组而不是vector的缺点
ANS:与vector类型相比,数组具有如下特点:数组的长度是固定的,而且数组不提供获取其容量大小的size操作,也不提供自动添加元素的push_back操作。因此,程序员无法再程序运行时知道一个给定数组的长度,而且如果需要更改数组的长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组的存储空间中去。与使用vector类型的程序相比,使用内置数组的程序更容易出错且难以调试。
2.已知一指针,无法确定其是否指向一个有效对象。因为,在C++语言中,无法检测指针是否被初始化,也无法区分一个地址是有效地址,还是由指针所分配的存储空间中存放的不确定值的二进制位形成的地址。
3.解释指针和引用的主要区别。
ANS:使用引用和指针都可以间接访问另一个值,但他们之间存在两个重要区别:(1)引用总是指向某个确定对象(事实上,引用就是该对象的别名),定义引用时没有进行初始化会出现编译错误;(2)赋值行为上存在差异:给引用赋值修改的是该引用所关联的对象的值,而不是使该引用与另一对象关联。引用一经初始化,就是种指向同一特定对象。给指针赋值修改的是指针对象本身,也就是使该指针指向另一对象,指针在不同时刻可指向不同的对象(只要保证类型匹配)。
4.定义const对象时必须进行初始化。
5.不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。
6.C++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址,它只支持几种有限的操作:与另一指针进行比较;向函数传递void*指针或从函数返回void*指针;给另一个void*指针赋值。不允许使用void*指针操纵它所指向的对象。