zoukankan      html  css  js  c++  java
  • C/C++常见面试题整理

    C/C++常见面试题整理

    一、总结

    一句话总结:

    事情皆有因果。却有未必好因造好果,看你是短看还是长看。从概率和从极长远来看,当然是好人好报,但是具体短期的随机性就无法预测了。

    1、C++里面如何声明const void f(void)函数为C程序中的库函数?

    在该函数前添加extern “C”声明。由于编译后的名字不同,C++程序不能直接调用C 函数。

    2、c++中类和c语言中struct的区别(至少两点)?

    a、c++中的类默认的成员是私有的,struct默认的是共有的。
    b、c++中的类可以定义成员函数,struct只能定义成员变量。

    3、变量的声明和定义有什么区别?

    声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。

    4、memset ,memcpy 的区别?

    memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为’′。
    memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;

    5、程序什么时候应该使用线程,什么时候单线程效率高?

    1、耗时的操作使用线程,提高应用程序响应
    2、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
    3、多CPU系统中,使用线程提高CPU利用率
    4、改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 其他情况都使用单线程。

    6、介绍一下模板和容器。如何实现?(也许会让你当场举例实现)?

    模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。 它体现了一种通用和泛化的思想。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.

    7、如何在C中初始化一个字符数组?

    a、最简单的方法是char array[];
    b、也可char array[5]={’1′,’2′,’3′,’4′,’5′};或者char array[5]={“12345″};
    c、或者char array[2][10]={“China”,”Beijing”};也许更符合“初始化”的意思。

    8、C与C++内存的分配方式有几种?

    a、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。
    b、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    c、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    9、在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"?

    a、C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。
    b、假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在库中的名字为foo,而C++编译器则会产生像foointint之类的名字。
    c、C++提供了C连接交换指定符号extern"C"来解决名字匹配问题。

    10、如何让局部变量具有全局生命期?

    用static修饰就可以了,但是只是生命期延长,范围并没有扩大,除非把这个变量定义在函数体外的静态区,不过那样就变成全局变量了,仿佛不符合题目要求。

    11、new、delete、malloc、free关系?

    delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。


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

    二、C/C++常见面试题整理

    转自或参考:C/C++常见面试题整理 - 简书
    https://www.jianshu.com/p/6aafc59faa82

     
  • 相关阅读:
    组织行为学对项目管理的意义(2):人格的大五模型 . 分类: 项目管理 2014-06-25 19:10 308人阅读 评论(0) 收藏
    组织行为学对项目管理的意义(2):人格的大五模型 . 分类: 项目管理 2014-06-25 19:09 267人阅读 评论(0) 收藏
    组织行为学对项目管理的意义(1) . 分类: 项目管理 2014-06-25 19:08 273人阅读 评论(0) 收藏
    管理中第一可怕之事(3) . 分类: 项目管理 2014-06-25 18:54 257人阅读 评论(0) 收藏
    腾讯是如何一刀刀,在15年间干死那些竞争对手的?! (zz)
    北京、上海家庭年收入情况统计 (zz)
    追求成功还是避免失败 (zz)
    如何获取codeforces的完整数据
    整形范围记忆和注意事项
    位运算的一种应用 和 hiho1516过河解题报告
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12962015.html
Copyright © 2011-2022 走看看