您的位置:首页 > 编程语言 > C语言/C++

C++面试宝典(整理版)4

2015-07-13 22:25 393 查看



 60.解释局部变量、全局变量和静态变量的含义。

局部变量,作用域在指定的函数范围内,超出作用域自动释放。如果与全局变量同名,则在局部范围内以局部变量为主。

全局变量,有效范围从定义变量的位置开始到本源文件结束,

静态变量,生存周期与全局变量一样长,有效范围仅限于声明的位置,如果声明的位置是函数内部,则在函数内部可见,如果是文件范围声明,则在当前文件(声明变量之后)有效。


61.论述含参数的宏与函数的优缺点。 

含参数宏具有宏的特性(原文替换宏定义部分的代码),代码执行效率高,但无法对参数进行限制,特别是执行指针,如以*p++作为参数时,会出现执行含参数宏后,参数发生变化的bug,要慎用。
函数,封装一定逻辑的操作,提高代码的复用性,同时能够使用const关键字,限制参数在函数内部改变等安全机制,使用起来更加安全,但效率上需要执行函数的调用与参数入栈的过程,有时间开销。


61.Windows程序的入口是哪里?写出Windows消息机制的流程。 

Widnows程序入口:WinMain()

消息机制流程:
1.Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。
2.Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后,Windows将事件转换为一个「消息」并将消息放入程序的消息队列中。程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息:
相关链接:
http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html
http://blog.csdn.net/tigernana/article/details/8079675  
 


62.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。   

C++里面的动作不是全部有main()引起的,利用全局变量的初始化工作,在main()函数的执行前进行。

 

各类情况下的入口点函数:

mbcs的console程序的默认起点是main,

unicode的console程序是wmain

unicode的windows应用程序wWinMain

mbcs   的windows应用程序是WinMain

unicode和mbcs的dll则是  DllMain

原文链接:http://blog.sina.com.cn/s/blog_5dc7bbf80100wet3.html


63.软件开发五个主要step是什么?

你在开发软件的时候,这5个step分别占用的时间百分比是多少? 

a 需求分析: 分析并确定用户需求,用采用适当的模型规范地表述这一需求,形成分析模型为要处理的现实世界中的事物建立抽象建模。
b 系统设计: 设计阶段:确定系统如何实现所需的功能----采用适当的数据结构+控制逻辑,将分析模型细化。
c 编码实现: 选定一种适当的编程语言,编码实现上述的设计,并在开发过程中引入测试,完善整个解决方案。
d 测试阶段
e 系统维护
 


64.static有什么用途?(请至少说明两种)

答 、

1.限制变量的作用域(文件级的)。

2.设置变量的存储域(全局数据区)。

 


65.引用与指针有什么区别?

答 、

1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。


66.描述实时系统的基本特性

答 、在特定时间内完成特定的任务,实时性与可靠性。

 


67.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

答 、全局变量储存在静态数据区,局部变量在堆栈中。


68.什么是平衡二叉树?

答 、左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。

 


69.堆栈溢出一般是由什么原因导致的?

答 、1.没有回收垃圾资源

        2.层次太深的递归调用     

 编译器默认有一个堆栈大小限制,所有函数调用及函数内部申请的局部变量都是在栈内分配内存,每次调用函数时都会把当前函数的状态入栈,调用参数入栈,然后开始执行调用函数,当函数执行完毕后,通过出栈操作还原上一级函数的调用状态,当调用层数过多,或者申请局部变量过大,总内存大小超过默认栈大小,就会出现溢出的情况。


70.什么函数不能声明为虚函数?

答 、constructor

       Deconstructor 可以声明为虚函数。

       系统为一个空类创建的成员函数有那些。

 


71.冒泡排序算法的时间复杂度是什么?

答 、O(n^2)

 


72.写出float x 与“零值”比较的if语句。

答 、if(x>0.000001&&x<-0.000001)
float由于精度误差的缘故无法与0做等值比较判断,只能在高精度的极小数值进行范围判断,确定是不是等于0。


73.Internet采用哪种网络协议?该协议的主要层次结构?

答 、tcp/ip 应用层/传输层/网络层/数据链路层/物理层

 


74.Internet物理地址和IP地址转换采用什么协议?

答 、ARP (Address Resolution Protocol)(地址解析协议)

 


75.IP地址的编码分为哪俩部分?

答 、IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与之后才能区分哪些是网络位哪些是主机位。

 


76.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

答 、循环链表,用取余操作做

 


77.不能做switch()的参数类型是:

答 、switch的参数不能为实型,字符串。


78.局部变量能否和全局变量重名?

答、能,局部会屏蔽全局。要用全局变量,需要使用"::"

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

 


79.如何引用一个已经定义过的全局变量?

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


80.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答 、可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 C++