c++面试题(1)

1、new,delete,malloc,free的之间的关系。

    这道题在笔试中经常出现,首先我们要明白以下几点:

   a、new和delete对应,malloc和free对应。

   b、什么是内部数据类型,什么是非内部数据类型。

       内部数据类型:就是编译器本来就认识的类型,不需要用户自己定义。比如:int,char,double等基本类型。

       非内部数据类型:需要用户自己定义的,这样编译器才能识别。比如enum,struct,class等定义关键词修饰的变量。

    c、new(delete)和malloc(free)都可以用于动态申请内存和释放内存,但是malloc(free)只能用于内部数据类型的申请和释放,而 new(delete)既可以用于内部类型也可以用于非内部类型。

    d、new(delete)是c++的运算符,而malloc(free)是c++/c的库函数。

    主要回答以上4点就可以了。

2、delete和delete[]的区别。

        这题回答以下几个点:

       a、delete只会调用一个析构函数,delete[]则会调用数组的每一个析构函数。

        b、delete和new对应,delete[]和new[]对应。

              在这里我们需要注意的是对于内部数据类型,使用new[],则此时用delete会全部释放内存。

              int *a=new int[10];

              delete a;

               delete[] a;

             用delete和delete[]其实是一样的,由于内部数据类型没有析构函数。

              但是对于非内部数据类型,则是不一样的。对于new[] 必须用delete[]进行内存释放。

3、引用和指针的区别?

     对于这道题,我们可以从以下几点来回答:

a、什么是指针,什么是引用?

      指针:实际上是指向某块内存的地址, 通过这个地址我们就能找到内存,可以理解为家庭的具体住址,通过住址我们就能找到里面的人。

    引用:简单来说就是变量的别名,简单地说,就是给变量起个外号。举例:某个人叫张三,江湖上外号:三哥,提起三哥就知道指代张三这个人。所以三哥就是引用,张三就是变量。

b、弄清楚了指针和变量的概念之后的,接下来我们来分析它们的异同点。

    (1)、最重要的一个是指针可以为空,而引用不能为NULL。

          这就意味着,我们拿到引用时不需要判断空,但是我们拿到指针时,一定要判读是否为空,如果为空, 后期调用有很可能出错,这点必须记住。

   (2)、引用在初始化的时候必须赋值,一旦赋值后,后期无法改变,一旦叫三哥后就没有再改变,行不更名坐不改姓。

  c、引用修饰函数参数时,可以提高效率。

  

   如上图,fun1使用值传递参数,它会拷贝出一个临时对象,临时对象再进行处理。

   而在fun2使用引用传递,此时不会产生临时对象。

   由此可以看出,引用还能提高程序的效率,实在不可小觑。

猜你喜欢

转载自blog.csdn.net/qq_34062754/article/details/86583774