• 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

     
  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12962015.html
Copyright © 2020-2023  润新知