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





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









3. const和static的作用 













太常见的问题了,下面给出一个较详细的参考答案:





static关键字:





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





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





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





4)在类中的static成员变量属于整个类所有,对类的所有对象只有一份复制。





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





const关键字:





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





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





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





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









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

















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





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













6.  易误解:如果int a[5], 那么a与&a是等价的,因为两者地址相同。 

 解答:一定要注意a与&a是不一样的,虽然两者地址相同,但意义不一样,&a是整个数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型 是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。





7.  如何将一个小数分解成整数部分和小数部分? 





要记得利用头文件中的库函数modf,下面是函数原型(记住一些实用的库函数,避免自己重写):





















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\n", *p);

















输出:5 

说明:因为a+1指向a的第二个元素,[3]表示再向后移动3个元素。





10. 程序输出题:









输出:0 0 1 1 

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









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









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





注意:









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





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





(1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 

(2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 

(3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

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





C的结构体只是把数据变量给包裹起来了,并不涉及算法。 

而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。 





C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

















12.  如何在类中定义常量成员并为其初始化? 

解答:只能在初始化列表里对const成员初始化,像下面这样:









下面的做法是错误的:









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









13.  在定义类的成员函数时使用mutable关键字的作用是什么? 

解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,防止出现编译出错。例子如下:









14. 构造函数、拷贝构造函数、析构函数的调用点和顺序问题,如下面这个例子输出是什么?









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









引申:拷贝构造函数在哪些情况下被调用? 

(1)函数的参数为类对象且参数采用值传递方式; 

(2)将类对象做为函数的返回值。





15. C++中的explicit关键字有何作用? 

解答:禁止将构造函数作为转换函数,即禁止构造函数自动进行隐式类型转换。 

例如CBook中只有一个参数m_price,在构建对象时可以使用CBook c = 9.8这样的隐式转换,使用explicit防止这种转换发生。





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









17. 静态数据成员只能在全局区域进行初始化,而不能在类体中进行(构造函数中初始化也不行),且静态数据成员不涉及对象,因此不受类访问限定符的限制。 

例子说明如下:









18. C++中可以重载的运算符:new/delete、new[]/delete[]、++等。 

不可以重载的运算符:、.、::、?:、sizeof、typeid、.、**、不能改变运算符的优先级。





引申:重载++和–时是怎么区分前缀++和后缀++的? 

例如当编译器看到++a(先自增)时,它就调用operator++(a); 

但当编译器看到a++时,它就调用operator++(a, int)。即编译器通过调用不同的函数区别这两种形式。





19. C++的多态性分为静态多态和动态多态。 

静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的; 

动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。





20.  虚函数原理考点,例如下面程序的输出是什么?









问:sizeof(A) = ?





解答: 

关于类占用的内存空间,有以下几点需要注意: 

(1)如果类中含有虚函数,则编译器需要为类构建虚函数表,类中需要存储一个指针指向这个虚函数表的首地址,注意不管有几个虚函数,都只建立一张表,所有的虚函数地址都存在这张表里,类中只需要一个指针指向虚函数表首地址即可。 

(2)类中的静态成员是被类所有实例所共享的,它不计入sizeof计算的空间 

(3)类中的普通函数或静态普通函数都存储在栈中,不计入sizeof计算的空间 

(4)类成员采用字节对齐的方式分配空间





答案:12(32位系统)或16(64位系统)





21.  虚继承的作用是什么? 

在多继承中,子类可能同时拥有多个父类,如果这些父类还有相同的父类(祖先类),那么在子类中就会有多份祖先类。例如,类B和类C都继承与类A,如果类D派生于B和C,那么类D中就会有两份A。为了防止在多继承中子类存在重复的父类情况,可以在父类继承时使用虚函数,即在类B和类C继承类A时使用virtual关键字,例如: 

class B : virtual public A 

class C : virtual public A 

注:因为多继承会带来很多复杂问题,因此要慎用。

C与C++面试易出知识点的更多相关文章

  1. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  2. JavaScript 易错知识点整理

    本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES ...

  3. 史上前端面试最全知识点(附答案)---html & js & css

    史上前端面试最全知识点(附答案) 一.html & js & css 1.AMD和CMD是什么?它们的区别有哪些? AMD和CMD是二种模块定义规范.现在都使用模块化编程,AMD,异步 ...

  4. JavaScript易错知识点整理[转]

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  5. JS易错知识点

    JAVASCRIPT易错知识点整理 前言 本文是学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由 ...

  6. Java面试之http知识点(必问)

    Java面试之http知识点(必问)   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/q ...

  7. 微信小程序和微信H5测试中易出Bug的点和注意事项

    一.微信小程序 易出Bug的点: 小程序的分享转发功能 背景:小程序项目开发基本完毕也都已经测过几轮,功能上基本没有什么问题,但是上线后却被客户发现通过分享转发小程序给别人,别人无法正常打开的情况 原 ...

  8. Java易错知识点(1) - 关于ArrayList移除元素后剩下的元素会立即重排

    帮一个网友解答问题时,发现这样一个易错知识点,现总结如下: 1.易错点: ArrayList移除元素后,剩下的元素会立即重排,他的 size() 也会立即减小,在循环过程中容易出错.(拓展:延伸到所有 ...

  9. 前端面试常考知识点---CSS

    前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...

随机推荐

  1. python学习笔记(28)-unittest单元测试-执行用例

    执行用例 #写一个测试类 import unittest import HTMLTestRunnerNew #写好的模块可以直接调用 #import HTMLTest #测试报告模板 from cla ...

  2. vue中axios的post请求使用form表单格式发送数据

    vue使用插件qs实现 (qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库.) 在jquery中的ajax的方法已将此封装,所以不需要再次序列化 1. 安装   在项目中使用命令行工具输 ...

  3. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  4. 正则表达式awk学习(三)

    awk:格式化文本输出 gawk - pattern scanning and processing language awk:gawk的符号链接 基本用法:gawk [options] 'progr ...

  5. 向通用自动驾驶部门Cruise投资22.5亿美元,软银打得什么主意?

    5月29日,加利福尼亚州的一辆特斯拉Model S撞上停在路边的警车.据透露,当时这辆特斯拉正处于自动辅助驾驶即Autopilot模式.而在今年,这已经不是第一次特斯拉自动驾驶模式出问题了.此外,Ub ...

  6. JavaScript--DOM,BOM

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  7. Xshell中使用xftp怎么选择默认编辑器,如nodepad

    工具-选项-高级-编辑器路径

  8. 吴裕雄--天生自然python学习笔记:解决WebDriverException: Message: unknown error: missing or invalid 'entry.level'

    会出现这个错误是因为你的chrome浏览器与下载的chromedriver.exe版本不一致造成的. 到这个地址:https://npm.taobao.org/mirrors/chromedriver ...

  9. 吴裕雄--天生自然 Hadoop大数据分布式处理:关闭CenterOS 7防火墙

    使用命令:systemctl status firewalld.service 查看防火墙状态 执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态 使用命令:syst ...

  10. Block to|wreck|Range|Reach|span|chase around|amuse|exploit |instructed

    English note: Block to 纷涌而至 destroy多指彻底地.毁灭性地破坏,含导致无用,不能或很难再修复的意味. wreck侧重指船只.车辆.房屋等受到严重破坏或完全毁坏,也可指计 ...