c 面试题(C 开发人员面试问题)

小科普 176

大家好,我是柠檬哥,专注编程知识分享。

欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:

发送1024打包下载10个G编程资源学习资料

发送001获取阿里大神LeetCode 刷题笔记

发送002获取获取谷歌公司编程代码规范

发送003获取10个精美简历模板PDF和Word版

发送004获取100道精选 C 面试题和答案word版

发送005获取获取谷歌LeetCode算法笔记

今天给大家分享一些经典的C 面试题。

1.new、delete、malloc、free之间的关系

malloc 和 free 都是 C/C 语言的标准库函数,new/delete 是 C 的运算符。

new 调用构造函数,delete 会调用对象的析构函数,而 free 只会释放内存。

它们都可用于申请动态内存和释放内存。但对于非内部数据类型的对象而言,光用 malloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加给 malloc/free。因此C 语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符 delete。注意:new/delete 不是库函数。

2.delete和delete []的区别

delete 只会调用一次析构函数,而 delete[] 会调用每一个成员函数的析构函数。

在 More Effective C 中有更为详细的解释:当 delete 操作符用于数组时,它为每个数组元素调用析构函数,然后调用 operator delete 来释放内存。delete 与 new 配套,delete [] 与 new [] 配套

MemTest *mTest1=newMemTest[10];

MemTest *mTest2=newMemTest;

Int *pInt1=newint[10];

Int *pInt2=newint;delete[]pInt1;//-1-delete[]pInt2;//-2-delete[]mTest1;//-3-delete[]mTest2;//-4-

在 -4- 处报错。

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

3.C 有哪些性质(面向对象特点)

封装、继承和多态

4.子类析构时要调用父类的析构函数吗?

析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。

5.介绍多态、虚函数和纯虚函数。

多态:是对于不同对象接收相同消息时产生不同的动作。C 的多态性具体体现在运行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现;在程序编译时多态性体现在函数和运算符的重载上;

虚函数:在基类中冠以关键字 virtual 的成员函数。它提供了一种接口界面。允许在派生类中对基类的虚函数重新定义。

纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。作为接口而存在的纯虚函数不具备函数的功能,一般不能直接被调用。

从基类继承来的纯虚函数,在派生类中仍是虚函数。如果一个类中至少有一个纯虚函数,那么这个类被称为抽象类(abstract class)。

抽象类中不仅包括纯虚函数,也可包括虚函数。抽象类是必须用作派生其他类的基类,而不能用于直接创建对象实例。但仍可使用指向抽象类的指针支持运行时多态性。

注:

定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。

6.求下面函数的返回值(微软)

intfunc(x){intcountx =0;
while(x)
{
countx ;
x = x

上一篇:

下一篇:

  推荐阅读

分享