Skip to content

Latest commit

 

History

History
46 lines (30 loc) · 2.26 KB

File metadata and controls

46 lines (30 loc) · 2.26 KB

C++面试题

由于C++是本科常用语言,很久没用了,只搜集了较少的题目。

1.指针和引用的区别:

本质:指针是地址,引用是别名。

  • 引用被创建时必须同时初始化,指针可以在任意时刻初始化;
  • 引用不能为空,指针可以为空;
  • 引用一旦初始化就不能改变引用关系,指针指向的对象可以改变。 指针强大但危险,若只需借用别名时应使用引用。

2.函数传参的方式:

  • 值传递:【n -> x】,函数内的x是外部变量n的拷贝,当x改变时n不会改变;
  • 指针传递:【&n -> *x】,函数内的x是指向外部变量的指针,当x改变时n也会改变;
  • 引用传递:【n -> &x】,函数内的x是n的引用,实际上是同一个对象,当x改变时n也会改变。

3.为什么需要结构体字节对齐

  • 某些平台只能在特定地址处访问特定类型数据;
  • 提高存取速度(int类型若从奇数地址处开始需要两个读取周期);
  • 字节对齐的作用不仅是便于cpu快速访问,同时合理的利用字节对齐可以有效地节省存储空间。

4.内存动态申请和释放

  • 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式)。
  • 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中(即栈)。
  • 栈中系统分配的空间,在使用结束会自动释放。而程序员动态申请的空间则需要人为来释放,否则随着程序运行,内存占用积累,很容易造成内存泄漏。

5.内存泄漏和内存溢出

程序申请的内存没有及时回收就造成了内存泄漏,多次内存泄漏会积累成内存溢出。当程序申请内存时,可用内存不够了,就叫内存溢出。

6.多态

调用成员函数时,会根据调用函数的对象而调用不同的函数。

面向对象

面向对象是一种对现实世界的理解和抽象,将需求要素转化为对象的数据和方法进行问题处理。

STL

  • 容器(Containers):deque、list、vector、map等;
  • 算法(Algorithms):对容器内容执行初始化、排序、搜索、转换等方法;
  • 迭代器(Iterators):遍历对象集合的元素。