1.概念填空题
1.1 数组定义时有3个要素:数组名、数组元素的 类型 和数组元素的 个数 。按元素在数组中的位置进行访问,是通过 下标 进行的,称为 直接 或 索引 访问。
1.2 C++中的多维数组是 嵌套 定义的,即多维数组的基本定义是 数组 构成的数组,三维数组的元素是 二维数组 。
1.3 计算机内存是一维编址的,多维数组在内存中的存储 必须转换为一维方式 ,C++多维数组在内存中的排列是 行 方式,即越 低 的下标变化 快 。设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为 a[0][0]的地址 + (i*n+j)*u 。
1.4数组名是 整型 常量,数组名赋给同类型的指针后,该指针是指向数组 首元素 的指针。数组名在表达式中被转换为指向 数组首元素 的指针常量。
1.5每个对象都有一个指向自身的指针,称为 this 指针,通过使用它来确定其自身的地址。该指针只能 读 ,不能写。
1.6在C++中,对象访问成员所用的运算符是 . ,通过指针访问对象的成员所用的运算符是 ->。
1.7 当动态分配失败时,系统采用 返回NULL 来表示发生了异常。如果new返回的指针丢失,则所分配的自由存储区空间将无法收回,称为 内存泄漏 。这部分空间必须在 计算机重启 才能找回,这是因为无名对象的生命期 为整个程序 。
1.8 默认复制构造函数只能完成 对象成员的赋值 ,可能会造成 重复释放 ,默认的析构函数可能会产生 内存泄漏 。“=”运算也会产生对象 重复释放 。因此我们需要自定义复制构造函数完成对象的 深复制 。
1.9 在用new运算符建立一个三维数组int 4*5*6,使用了 3 个下标运算符,用delete运算符释放该数组时使用了 1 个下标运算符。new返回的指针类型是 int (*) [5]6] 。
2 简答题
2.1 用一维数组名作函数参数和用一维数组元素函数参数的含义是否相同?为什么 2.2 指针变量与整型量的加减运算代表什么意义?
2.3个指向普通变量的指针进行减运算是否有意义?为什么
2.4什么是浅拷贝?什么是深拷贝?二者有何异同?何时必须自定义复制构造函数、析构函数,何时必须自定义=运算符中在函数, 自定义的复制构造函数、析构函数应该怎样设计? 2.5从右往左解释int *(*(*pf)[5])(double *)中4个*的含义。
2.6 为什么动态建立类对象数组时,类的定义中一定要有默认的构造函数?
3.选择题
3.1以下对一维数组a的正确定义是(C )。 A.int n=5, a[n]; B.int a (5);
C.const int N=5;int a[N]; D.int n; cin>>n; int a[n];
3.2己知int a[10]=={0,1,2,3,4,5,6,7,8,9},*p=a;则不能表示数组a中元素的选项是( C )。 A.*a B.*p C.a D.a[ p-a]
3.3 己知int a[]={0,2,4,6,8,10},*p=a+1;其值等于0的表达式是(D )。 A.*(p++) B.*(++p) C.*(p--) D.*(--p)
相关推荐: