50道c++面试题
0. static有什么用途?(请至少说明两种)
1).限制变量的作用域,全局变量加上static之后全局变量的作用域是定义该变量的单个文件,而不加static的全局变量可以被同一个工程中的其他文件引用2).设置变量的存储域。局部变量加上static之后变量的存储区由栈变为全局区(也可以成为静态区)1. 引用与指针有什么区别?
1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。2. 描述实时系统的基本特性
系统能及时响应外部事件的请求,在特定时间内完成特定的任务。具有多路性,独立性,及时性,交互性,可靠性等特点。
全局变量储存在静态数据库,局部变量在堆栈
左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于15. 堆栈溢出一般是由什么原因导致的?
(1)开辟的堆栈内存空间太大。(2)没有回收垃圾资源.6. 什么函数不能声明为虚函数?
构造函数。因为构造函数必须构造一个实际存在的类,所以不能定义为虚函数7. 冒泡排序算法的时间复杂度是什么?
O(n^2)8. 写出float x 与“零值”比较的if语句。
if(x>0.000001&&x<-0.000001)9. Internet采用哪种网络协议?该协议的主要层次结构?
tcp/ip 应用层/传输层/网络层/数据链路层/物理层10. Internet物理地址和IP地址转换采用什么协议?
ARP (Address Resolution Protocol)(地址解析協議从IP地址到物理地址的映射)和RARP(逆地址解析协议,从物理地址到IP地址的映射)11.IP地址的编码分为哪俩部分?
IP地址由两部分组成,网络号netid和主机号hostid。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。12.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。
循环链表,用取余操作做。
switch的参数不能为实型,包括:float,double,long double。14、局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内15、如何引用一个已经定义过的全局变量?
答:extern。可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错16、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
可以,在不同的C文件中以static形式来声明同名全局变量。在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错17、语句for( ;1 ;)有什么问题?它是什么意思?
答:和while(1)相同。至于有什么问题,我想应该是这样的写法有点别扭,不常用,不太被人理解,执行效率上我网上查了一下说在现在的编译器上两者生成的汇编代码是一样的,所以应该没什么区别。18、do……while和while……do有什么区别?
答:前一个循环一遍再判断,后一个判断以后再循环19、请写出下列代码的输出内容
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。static函数与普通函数作用域不同。一般来说不使用类的话是不会使用static函数的 。 一般使用static函数的类都基本上是想记录类对象被引用的次数或者这个函数地址需要被外部使用, 类似回调。
static函数在内存区域中是在全局函数区, 而普通成员函数则是在代码区的累对象区域中。 调用类中的static函数时只需要前面加上类作用域区分符就可以了, 调用普通成员函数就需要加上类对象实例指针。类中的静态成员函数不能访问普通成员变量以及普通成员函数,但是可以访问静态成员变量和静态成员函数。因为静态成员函数是属于整个类的,所以他不能访问某个对象的 成员变量,因为它没有this指针,但是他可以访问静态成员函数和静态成员变量。另外static函数与普通函数作用域不同。static函数的作用域是文件级,普通函数的作用域是项目级。一般static函数都是用于类中,用于统计该类的对象的数目。另外static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
21、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
22、设有以下说明和定义:答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20data是一个struct, 每个变量分开占用空间. 依次为int(4) + DATE(20) + double(8) = 32.所以结果是 20 + 32 = 52.23、队列和栈有什么区别?
队列先进先出,栈后进先出24、写出下列代码的输出内容
#include<string>#include<iostream>int main(){ char*src="hello,world"; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len+1); char* d=dest; char* s=&src[len-1]; while(len--!=0) *d++=*s--; printf("%s",dest); free(dest); return 0;} 第一题的答案应该是4^3-1=63规律是n^3-1(当n为偶数0,2,4)n^3+1(当n为奇数1,3,5)答案:6327.用两个栈实现一个队列的功能?要求给出算法和思路!
这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。
28.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?
函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 程序例: #include <stdlib.h> #include <stdio.h> int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); }28.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
c用宏定义,c++用inline29.直接链接两个信令点的一组链路称作什么?
PPP点到点连接
30.软件测试的种类
黑盒:针对系统功能的测试 白合:测试函数功能,各函数接口33.确定模块的功能和模块的接口是在软件设计的那个队段完成的?
概要设计阶段35.unsigned char *p1;
答:此题不会,望大牛指点。
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
答案:B,D
37.属于网络层协议的是:B,C答:把循环语句内外换一下42.以下是求一个数的平方的程序,请找出错误:
b=SQUARE(a++);
答:去掉++
48.Windows下的内存是如何管理的?
和大多数现代操作系统一样,Windows实现按需调页的虚拟内存机制。由于操作系统使用了虚拟内存,这就给应用程序造成了一个假象,以为计算机安装的内存远远超过自己所需要的数量。在32位的Windows计算机上,进程具有4GB的虚拟内存地址空间,操作系统通常会把这4GB的地址空间划分为进程和系统两个部分。因此,每个进程可以获得2GB的虚拟内存,根据可用的容量。分配给所有进程的虚拟内存总数不能超过页面文件和大多数物理内存的总和(操作系统本身也要占据一小部分物理内存)。
49.C/C++编译器中虚表是如何完成的?
参考博客http://blog.csdn.net/adermxl/article/details/5881773