欢迎来到天天文库
浏览记录
ID:11999318
大小:56.00 KB
页数:12页
时间:2018-07-15
《c数组、指针与字符串xiti答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.概念填空题1.1数组定义时有3个要素:数组名、数组元素的类型和数组元素的个数。按元素在数组中的位置进行访问,是通过下标进行的,称为直接或索引访问。1.2C++中的多维数组是嵌套定义的,即多维数组的基本定义是数组构成的数组,三维数组的元素是二维数组。1.3计算机内存是一维编址的,多维数组在内存中的存储必须转换为一维方式,C++多维数组在内存中的排列是行方式,即越低的下标变化快。设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为a[0][0]的地址+(i*n+j)*u。1.4数组名是整型常量,数组名赋给同类型的指针后,该指针
2、是指向数组首元素的指针。数组名在表达式中被转换为指向数组首元素的指针常量。1.5每个对象都有一个指向自身的指针,称为this指针,通过使用它来确定其自身的地址。该指针只能读,不能写。1.6在C++中,对象访问成员所用的运算符是.,通过指针访问对象的成员所用的运算符是->。1.7当动态分配失败时,系统采用返回NULL来表示发生了异常。如果new返回的指针丢失,则所分配的自由存储区空间将无法收回,称为内存泄漏。这部分空间必须在计算机重启才能找回,这是因为无名对象的生命期为整个程序。1.8默认复制构造函数只能完成对象成员的赋值,可能会造成重复释放,默
3、认的析构函数可能会产生内存泄漏。“=”运算也会产生对象重复释放。因此我们需要自定义复制构造函数完成对象的深复制。1.9在用new运算符建立一个三维数组int4*5*6,使用了3个下标运算符,用delete运算符释放该数组时使用了1个下标运算符。new返回的指针类型是int(*)[5]6]。2简答题2.1用一维数组名作函数参数和用一维数组元素函数参数的含义是否相同?为什么2.2指针变量与整型量的加减运算代表什么意义?2.3个指向普通变量的指针进行减运算是否有意义?为什么2.4什么是浅拷贝?什么是深拷贝?二者有何异同?何时必须自定义复制构造函数、析
4、构函数,何时必须自定义=运算符中在函数,自定义的复制构造函数、析构函数应该怎样设计?2.5从右往左解释int*(*(*pf)[5])(double*)中4个*的含义。2.6为什么动态建立类对象数组时,类的定义中一定要有默认的构造函数?3.选择题3.1以下对一维数组a的正确定义是(C)。A.intn=5,a[n];B.inta(5);C.constintN=5;inta[N];D.intn;cin>>n;inta[n];3.2己知inta[10]=={0,1,2,3,4,5,6,7,8,9},*p=a;则不能表示数组a中元素的选项是(C)。A.*
5、aB.*pC.aD.a[p-a]3.3己知inta[]={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++”;则语句cout<6、指针D.类的非静态成员函数才有this指针3.6对于类型相同的两个指针变量之间,不能进行的运算是(C)。A.7、=*ptr1*(*ptr2);3.9设有语句intarray[3][4];,则在下面几种引用下标为i和j的数组元素的方法中,不正确的引用方式是(D)。A.array[i][j]B.*(*(array+i)+j)C.*(array[i]+j)D.*(array+i*4+j)3.10函数原型为fun(int(*p)[3],int),调用形式为fun(a,2),则a的定义应该为(C)。A.int**aB.int(*a)[]C.inta[][3]D.inta[3]3.11已知p是一个指向类Sample数据成员m的指针,S是类Sample中的一个对象。如8、果要给m赋值为5,正确的是(C)。A.S.P=5;B.S->P=5;C.S.*P=5;D.*S.P=5;3.12下面程序段的运行结果是(D)。char
6、指针D.类的非静态成员函数才有this指针3.6对于类型相同的两个指针变量之间,不能进行的运算是(C)。A.
7、=*ptr1*(*ptr2);3.9设有语句intarray[3][4];,则在下面几种引用下标为i和j的数组元素的方法中,不正确的引用方式是(D)。A.array[i][j]B.*(*(array+i)+j)C.*(array[i]+j)D.*(array+i*4+j)3.10函数原型为fun(int(*p)[3],int),调用形式为fun(a,2),则a的定义应该为(C)。A.int**aB.int(*a)[]C.inta[][3]D.inta[3]3.11已知p是一个指向类Sample数据成员m的指针,S是类Sample中的一个对象。如
8、果要给m赋值为5,正确的是(C)。A.S.P=5;B.S->P=5;C.S.*P=5;D.*S.P=5;3.12下面程序段的运行结果是(D)。char
此文档下载收益归作者所有