最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • C/C++求职宝典21个重点笔记(常考笔试面试点)

    1. char c = '72'; 中的72代表1个字符,72是8进制数,代表ASCII码字符“:”。

    2. 10*a++ 中a先进行乘法运算再自增(笔试中常常喜欢出这类运算符优先级容易混淆的输出问题)。

    3. const和static的作用 
      太常见的问题了,下面给出1个较详细的参考答案:

      static关键字:

      1)函数体内static变量的作用范围为函数体。不同于auto变量。该变量的内存只被分配1次。因此其值在下次调用时仍保持上次的值。

      2)在模块内的static全局变量可以被模块内的所有函数访问。但不能被模块外的其他函数访问。

      3)在模块内的static函数只可被这1模块内的其它函数调用。这个函数的使用范围被限制在声明它的模块内。

      4)在类中的static成员变量属于全部类所有,对类的所有对象只有1份复制。

      5)在类中的static成员函数属于全部类所有,这个函数不接受this指针,因此只能访问类的static成员变量。

      const关键字:

      1)欲禁止1个变量被改变,可使用const关键字。在定义该const变量时,通常需要对它进行初始化。由于以后就没有机会再改变它了。

      2)对指针来讲,可以指定指针的本身为const,也能够指定指针所指向的数为const。或2者同时为const。

      3)在1个函数的声明中,const可以修饰形参,表明它是1个输入参数。在函数内不能改变其值。

      4)对类的成员函数,若指定其为const类型。则表明其是1个常量函数。不能修改类的成员变量。

      5)对类的成员函数,有时候必须指定其返回值为const类型。以使得其返回值不为“左值”。

    4. 注意sizeof不是函数而是运算符,所以在计算变量所占用空间大小时,括号是可以省略的,但在计算类型大小时括号则不能省略,比如int i = 0; 则sizeof int是毛病的。

    5. 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且1次只能交换两个数。


      #include <stdio.h>

      int main() {
      int a[] = {10, 6, 9, 5, 2, 8, 4, 7, 1, 3};
      int i, tmp;
      int len = sizeof(a) / sizeof(a[0]);
      for(i = 0; i < len;) {
      tmp = a[a[i] - 1];
      a[a[i] - 1] = a[i];
      a[i] = tmp;
      if(a[i] == i + 1) i++;
      }
      for(i = 0; i < len; ++i)
      printf("%d ", a[i]);
      printf("
      "
      );
      return 0;
      }

    6. 易误解:如果int a[5], 那末a与&a是等价的,由于二者地址相同。 
      解答:1定要注意a与&a是不1样的,虽然二者地址相同,但意义不1样,&a是全部数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下1个对象的地址,已越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。

    7. 如何将1个小数分解成整数部份和小数部份? 
      要记得利用头文件中的库函数modf,下面是函数原型(记住1些实用的库函数,避免自己重写):

      double modf(double num, double *i); // 将num分解为整数部份*i和小数部份(返回值决定)
    8. 可作为函数重载判断根据的有:参数个数、参数类型、const修饰符; 
      不可以作为重载判断根据的有:返回类型。

    9. 程序输出题:

      int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
      int *p = &(a + 1)[3];
      printf("%d
      "
      , *p);

      输出:5 
      说明:由于a+1指向a的第2个元素,[3]表示再向后移动3个元素。

    10. 程序输出题:

      char str1[] = "abc";
      char str2[] = "abc";
      const char str3[] = "abc";
      const char str4[] = "abc";
      const char *str5 = "abc";
      const char *str6 = "abc";
      char *str7 = "abc";
      char *str8 = "abc";
      cout << (str1 == str2) << endl;
      cout << (str3 == str4) << endl;
      cout << (str5 == str6) << endl;
      cout << (str7 == str8) << endl;

      输出:0 0 1 1 
      说明:输出str1~str8的地址为:

      0x23aa80 
      0x23aa70 
      0x23aa60 
      0x23aa50 
      0x23aa48 
      0x23aa40 
      0x23aa38 
      0x23aa30

      输出str1~str8内容“abc”的存储地址为:

      0x23aa80 
      0x23aa70 
      0x23aa60 
      0x23aa50 
      0x100403030 
      0x100403030 
      0x100403030 
      0x100403030

      可以发现str1~str4中的内容是存在栈上,地址各不相同,而str5~str8的内容都是存储在常量区,所以地址都相同。

      注意:

      char *str = "abc";
      printf("%p
      "
      , str1);
      cout << &str1 << endl;

      上面打印的是字符串 “abc”的地址,下面打印的是 str1 变量的地址。

    11. C的结构体和C++结构体的区分

      (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 
      (2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private3种。 
      (3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或类继承过来的。

      以上都是表面的区分,实际区分就是面向进程和面向对象编程思路的区分:

      C的结构体只是把数据变量给包裹起来了,其实不触及算法。 
      而C++是把数据变量及对这些数据变量的相干算法给封装起来,并且给对这些数据和类不同的访问权限。 
      C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

    12. 如何在类中定义常量成员并为其初始化? 
      解答:只能在初始化列表里对const成员初始化,像下面这样:

      class CBook {
      public:
      const double m_price;
      CBook() :m_price(8.8) { }
      };

      下面的做法是毛病的:

      class CBook {
      public:
      const double m_price;
      CBook() {
      m_price = 8.8;
      }
      };

      而下面的做法虽未报错,但有个warning,也不推荐:

      class CBook {
      public:
      const double m_price = 8.8; // 注意这里若没有const则编译出错
      CBook() { }
      };
    13. 在定义类的成员函数时使用mutable关键字的作用是甚么? 
      解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,避免出现编译出错。例子以下:

      class CBook {
      public:
      mutable double m_price; // 如果不加就会出错
      CBook(double price) :m_price(price) { }
      double getPrice() const; // 定义const方法
      };
      double CBook::getPrice() const {
      m_price = 9.8;
      return m_price;
      }
    14. 构造函数、拷贝构造函数、析构函数的调用点温柔序问题,以下面这个例子输出是甚么?

      class CBook {
      public:
      CBook() {
      cout << "constructor is called.
      "
      ;
      }
      ~CBook() {
      cout << "destructor is called.
      "
      ;
      }
      };

      void invoke(CBook book) { // 对象作为函数参数,如果这里加了个&就不是了,由于加了&后是援用方式传递,形参和实参指向同1块地
      // 址,就不需要创建临时对象,也就不需要调用拷贝构造函数了
      cout << "invoke is called.
      "
      ;
      }

      int main() {
      CBook c;
      invoke(c);
      }

      解答:注意拷贝构造函数在对象作为函数参数传递时被调用,注意是对象实例而不是对象援用。因此该题输出以下:

      constructor is called.
      invoke is called.
      destructor is called. // 在invoke函数调用结束时还要释放拷贝构造函数创建的临时对象,因此这里还调用了个析构函数
      destructor is called.

      引伸:拷贝构造函数在哪些情况下被调用? 
      (1)函数的参数为类对象且参数采取值传递方式; 
      (2)将类对象做为函数的返回值。

    15. C++中的explicit关键字有何作用? 
      解答:制止将构造函数作为转换函数,即制止构造函数自动进行隐式类型转换。 
      例如CBook中只有1个参数m_price,在构建对象时可使用CBook c = 9.8这样的隐式转换,使用explicit避免这类转换产生。

    16. 在C++中,如果肯定了某1个构造函数的创建进程,在该构造函数中如果调用了其它重载的构造函数,它将不会履行其它构造函数的初始化列表部份代码,而是履行函数体代码,此时已退化成普通函数了。例子说明以下:

      class CBook {
      public:
      double m_price;
      CBook() {
      CBook(8.8);
      }
      CBook(double price) : m_price(price) { }
      };
      int main() {
      CBook c;
      cout << c.m_price << endl; // 此时其实不会输出理想中的8.8
      }
    17. 静态数据成员只能在全局区域进行初始化,而不能在类体中进行(构造函数中初始化也不行),且静态数据成员不触及对象,因此不受类访问限定符的限制。 
      例子说明以下:

      class CBook {
      public:
      static double m_price;
      };
      double CBook::m_price = 8.8; // 只能在这初始化,不能在CBook的构造函数或直接初始化
    18. C++中可以重载的运算符:new/delete、new[]/delete[]、++等。 
      不可以重载的运算符:、.、::、?:、sizeof、typeid、.、**、不能改变运算符的优先级。

      引伸:重载++和

    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » C/C++求职宝典21个重点笔记(常考笔试面试点)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级