网上收集的c/c++的笔试题,将部分整理成节,上传后大家方便。不是很全,但是可以作为笔试的参考吧。
构造函数,其参数是与它同属一类的对象的(常)引用;类定义中,如果未提供自己的拷贝构造函数,C++提供一个默认拷贝构造函数,该默认拷贝构造函数完成一个成员到一个成员的拷贝
15. 什么是深浅拷贝?浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存); 深拷贝是当一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数,使之不但拷贝成员也拷贝分配给它的资源. 16.面向对象程序设计的优点?开发时间短, 效率高, 可靠性高。面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。
数组名与指针典型面试题的分析
很多公司都问到了二维指针,二维数组,以及指向数组的指针的相关问题,在此,简单的给大家总结下,为大家在面试的时候增加一定的信心。
这类题目,总的来说,实际上可以归纳为如下几点:
1、 有一个一维数组int a1[10],定义一个指针,指向一维数组名。 2、 有一个一维数组int a2[10],定义一个指针,指向一维数组名的地址。 3、 有一个二维数组int a3[3][4],定义一个指针,指向二维数组名。 4、 有一个二维数组int a4[3][4],定义一个指针,指向二维数组名的地址。
对于这类题目,刚看到,似乎感觉比较没有思路,其实我们细心思考下,这四个问题,都是让我们定义一个指针,指向一片连续的内存空间,只是说这片内存空间有的是一维,有的是二维而已。
我们这次先分析下前面两道题:
那我们先看第一个题目,因为a1本身就是连续空间的首地址,那么我们就只需要定义一个地址变量p,让p = a就可以了,既然要用“=”,那么等号两边就需要的类型一
样,所以毫无疑问,p应该为 <数据类型> *p了。现在不确定的就是数据类型了。根据指针的定义,应该有p[0]到p[1]的偏移和a[0]到a[1]的偏移一致,我们很容易看出,a[0]和a[1]的偏移是int类型。那么对于第一个题目的数据类型就应该为int了,第一题的答案为int *p;
接着看第二问题,这个问题的难点在,什么叫数组名的地址,我们都知道C语言中的变量都有地址,但数组名是什么,他是不是也在内存中实实在在的存在哪,回答是否定的(感兴趣的同学,可以试着证明下,a的值和&a的值有什么特点)。a是数组空间的一个标号,那对标号取地址,是什么那,我们可以试着把&a和&a+1的地址都打印出来,然后看下他们的关系,我们会发现,&a和&a+1之间的偏移实际上是10个int的单位。那么我们也可以推出数组名的地址原来标示了整个数组的空间。也就是说&a[0]和&a[1]的偏移实际上是一个int [10]的空间。那么对于<数据类型> *p来说,数据类型就是指int [10]这个空间了。第二题的答案为int (*p)[10];
对于前2个问题,可以写出如下实验代码: int main(int argc,char *argv[]) {
int a1[10]; int *p;
int (*p1)[10];
printf(“the address of a1[0] is %p,the address of a1[1] is %p\n”,&a1[0],&a1[1]);
printf(“the &a1[0] is %p,the &a[1] is %p\n”,&(&a1)[0],&(&a1)[1]); p = a1; p1 = &a1; }
以上程序中p1,p即我们应该填的,如果编译器编译时没有警告,那么说明我们的这样写法是正确的。
那么在深入下的分析下,p1和p现在都要他访问a1中的第二个元素,即a1[1],应该怎么做那?
大家可以思考下,答案是:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库部分c、c++笔试题集锦(4)在线全文阅读。
相关推荐: