微信扫一扫打赏支持

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用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为’\0′。
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

 

 

 

 

 

 
posted @ 2020-05-26 02:03  范仁义  阅读(824)  评论(0编辑  收藏  举报