- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c数组、指针与字符串xiti答案
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; cinn; 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)
3.4已知char *a[]=( fortran,” basic, pascal, Java,”c++”;则语句couta[3];的显示结果是( C )。
A.t B.一个地址值 C.java D.javac++
3.5 下列关于this指针的叙述中,正确的是( D)。
A.任何与类相关的函数都有this指针
B.类的成员函数都有this指针
C.类的友元函数都有this指针
D.类的非静态成员函数才有this指针
3.6对于类型相同的两个指针变量之间,不能进行的运算是( C )。
A. B.= C.+ D.-
3.7若有语句int a=4,*point=a;下面均代表地址的一组选项是( D)。
A.a,point,*a B.*a,a,*point
C.*point,*point,a D.a,*point,point
3.8 已有定义int k=2;int *ptrl,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( B )。
A.k=*ptrl+*ptrl2; B.ptr2=k;
B.ptr1=ptr2 D.k=*ptr1*(*ptr2);
3.9设有语句int array[3]
文档评论(0)