面试题目积累

1.指针和引用的区别
答:指针指向一块内存,它的内容是指向内存的地址;引用是某内存的别名,引用使用是无需解引用,指针需解引用,引用不能为空,指针可以为空,引用在定义是被初始化一次,之后不可变;指针可变程序为指针变量分配内存区域,而引用不需要分配内存区域。

2.memcpy和strcpy的区别
答:memcpy用来内存拷贝的,它有指定的拷贝数据长度,他可以拷贝任何数据类型的对象Strcpy它只能去拷贝字符串,它遇到’\0′结束拷贝。

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

4.struct和class的区别
答:
1.成员变量
结构在默认情况下的成员是公共(public)的,而类在默认情况下的成员是私有(private)的。
2.存储
struct保证成员按照声明顺序在内存中存储。class不保证等等。
3.继承
struct A { };
class B : A{ }; //private继承
struct C : B{ }; //public继承
这是由于class默认是private,struct默认是public。

5.struct与union的区别(一般假定在32位机器上)
答:
1.一个union类型的变量,所有成员变量共享一块内存,该内存的大小有这些成员变量中长度最大的一个来决定,struct中成员变量内存都是独立的。
2.union分配的内存是连续的,而struct不能保证分配的内存是连续的。

6.指针在16位机、32位机、64位机分别占用多少个字节
答:
16位机 2字节
32位机 4字节
64位机 8字节

7.如何引用一个已经定义过的全局变量
答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

8.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

9.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现
答:c用宏定义,c++用inline

10.main 函数执行以前,还会执行什么代码
答:全局对象的构造函数会在main 函数之前执行。

11.描述内存分配方式以及它们的区别
答:
1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
2. 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
3. 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。

12.类成员函数的重载、覆盖和隐藏区别
答:
1.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。

2.覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
3.”隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数 被隐藏。

13.请说出const与#define 相比,有何优点
答:
1.const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
2.有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

14.进程间的通信方式
无名管道( pipe ):无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套接字( socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

15.线程同步方式
答:
临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问
互斥量:为协调共同对一个共享资源的单独访问而设计
信号量(PV操作):为控制一个具有有限数量用户资源而设计
事件:用来通知线程有一些事件已

16.static 关键字的作用
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用的时候仍然维持上次的值。
(2)在模块内的static全局变量可以被模块内所有函数访问,但是不能被模块外其他函数访问。
(3)在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内。
(4)在类中的static成员变量属于整个类所有,对类的所有对象只有一份拷贝。
(5)在类中的static成员函数属于整个类所有,这个函数不接收this指针,因而只能访问类的static成员变量。

17.const关键字的作用
(1)欲阻止一个变量被改变,可以使用const关键字,在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了。
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或者两者同时为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值。
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量。
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

17.#include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值