• 剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法


    编程语言:

    Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别?

    A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const。首先来看如下的一段代码:

        int a = 100;
        const int *b = &a;        // 1
        int const *b = &a;        // 2
        int  *const b = &a;        // 3
        const int *const b = &a;        // 4

      区分常量指针和指针常量的一个方法是,看const是在星号的左边还是右边。如果是1与2的形式则是常量指针(指针指向的内容为常量),因为const与放在变量声明符的位置无关,故1与2等价,这种形式 *b 不能变,但 b 能变,即指针指向的内容不能变,但指针的指向能变。如果是3的形式则是指针常量(指针本来就是常量),这种形式*b能变,但b不能变,即指针指向的内容能变,但指针的指向不能变。

    Q:如果写的函数需要传入的参数是复杂类型的实例,则传值和传引用有什么区别?什么时候应该为传引用加上const?
    A:分为三种情况。

    1. 用const修饰函数传入的参数

      对于非内部数据类型,比如一个复杂类的实例,应该是将传值改为传引用,目的是减少拷贝(例如调用拷贝构造函数),提高效率。但是对于内部数据类型,例如int,不能将传值改为传引用,否则不但不能提高效率,反而降低代码的可读性。

    2. 用const修饰函数的返回值

      如果以指针类型的方式作为函数的返回值,加上了const,则代表函数返回值(指针)的内容不能被修改,且只能被赋值给加const修饰的同类型指针。当然,用const_cast可以去电const属性。如果以值类型的方式作为函数的返回值,由于返回值会拷贝到临时变量中,故加上了const没什么用。如果以引用类型的方式作为函数的返回值,加上const这种情况并不多,但是在类的赋值号重载时就必须加上const,目的是为了链式表达。

    3.用const修饰成员函数

      为了提高代码的健壮性,任何不会修改数据成员的成员函数都应该被修饰为const,且注意const要加在参数列表后面。

    数据结构:
    1.熟练掌握链表、树、栈、队列和哈希表等数据结构及其相关操作?
    答:
    2.链表的插入和删除节点如何写?
    答:
    3.树的6中遍历怎么写?
    答:

    算法:
    1.了解各种查找和排序算法的原理及时间空间复杂度等?
    答:
    2.重点掌握二分查找,二叉排序树查找?
    答:
    3.重点掌握插入排序、冒泡排序、归并排序、快速排序?
    答:
    4.了解动态规划和贪婪算法等原理?
    答:

  • 相关阅读:
    nopcommerce商城系统--源代码结构和架构
    Unity3d Material(材质) 无缝拼接
    unity3d中的http通信 二
    unity3d中的http通信
    Unity3d webplayer获取url参数
    Unity3d 读取网络xml
    unity3d web.config设置
    Unity3d Web3d资源的动态加载
    Unity3d webplayer发布的问题和100%自适应浏览器
    Unity3d 与IOS 相互调用
  • 原文地址:https://www.cnblogs.com/parzulpan/p/11247375.html
Copyright © 2020-2023  润新知