欢迎来到天天文库
浏览记录
ID:13596060
大小:37.00 KB
页数:10页
时间:2018-07-23
《c。c++语言程序设计笔试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句*p=(char*)malloc(num);后未判断内存是否申请成功,应加上:if(*p==NULL) { ...//进行申请内存失败处理 }试题7存在与试题6同样的问题,在执行char*str=(char*)malloc(100);后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:str=NULL;试题6的T
2、est函数中也未对malloc的内存进行释放。剖析:试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。对内存操作的考查主要集中在:(1)指针的理解;(2)变量的生存期及作用范围;(3)良好的动态内存申请和释放习惯。在看看下面的一段程序有什么错误:swap(int*p1,int*p2){ int*p; *p=*p1; *p1=*p2; *p2=*p;}在swap函数中,p是一个“野”指针,有可能指向系统区,导
3、致程序运行的崩溃。在VC++中DEBUG运行时提示错误“AccessViolation”。该程序应该改为:swap(int*p1,int*p2){ intp; p=*p1; *p1=*p2; *p2=p;}3.内功题试题1:分别给出BOOL,int,float,指针变量与“零值”比较的if语句(假设变量名为var)解答:BOOL型变量:if(!var)int型变量: if(var==0)float型变量:constfloatEPSINON=0.00001;if((x>=-EPSINON)&
4、&(x<=EPSINON)指针变量: if(var==NULL)剖析:考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进
5、行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if(x==0.0),则判为错,得0分。试题2:以下为WindowsNT下的32位C++程序,请计算sizeof的值voidFunc(charstr[100]){ sizeof(str)=?}void*p=malloc(100);sizeof(p)=?解答:sizeof(str)=4sizeof(
6、p)=4剖析:Func(charstr[100])函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。数组名的本质如下:(1)数组名指代一种数据结构,这种数据结构就是数组;例如:charstr[10];cout<7、arstr[10];str++; //编译出错,提示str不是左值 (3)数组名作为函数形参时,沦为普通指针。WindowsNT32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof(str)、sizeof(p)都为4。试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事? least=MIN(*p++,b);解答:#defineMIN(A,B) ((A)<= (B)?(A):(B))MIN(*p++,b)会产生宏的副作用剖析:8、这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题:(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:#defineMIN(A,B) (A)<= (B)?(A
7、arstr[10];str++; //编译出错,提示str不是左值 (3)数组名作为函数形参时,沦为普通指针。WindowsNT32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof(str)、sizeof(p)都为4。试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事? least=MIN(*p++,b);解答:#defineMIN(A,B) ((A)<= (B)?(A):(B))MIN(*p++,b)会产生宏的副作用剖析:
8、这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题:(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:#defineMIN(A,B) (A)<= (B)?(A
此文档下载收益归作者所有