创维笔试题目Word文档格式.docx

上传人:b****3 文档编号:18339088 上传时间:2022-12-15 格式:DOCX 页数:7 大小:17.50KB
下载 相关 举报
创维笔试题目Word文档格式.docx_第1页
第1页 / 共7页
创维笔试题目Word文档格式.docx_第2页
第2页 / 共7页
创维笔试题目Word文档格式.docx_第3页
第3页 / 共7页
创维笔试题目Word文档格式.docx_第4页
第4页 / 共7页
创维笔试题目Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

创维笔试题目Word文档格式.docx

《创维笔试题目Word文档格式.docx》由会员分享,可在线阅读,更多相关《创维笔试题目Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

创维笔试题目Word文档格式.docx

=”此类形式。

请写出char*p与“零值”比较的if语句。

if(p==null) 

 

if(p!

=null)

二、以下为windowsnt下的32位c++程序,请计算sizeof的值(10分) 

charstr[]=“hello”;

char 

*p=str;

intn=10;

请计算 

sizeof(str)=6(2分) 

sizeof(p)=4(2分) 

sizeof(n)=4 

voidfunc(charstr[100]) 

sizeof(str)=4(2分) 

void*p=malloc(100);

三、简答题(25分) 

1、头文件中的ifndef/define/endif干什么用?

(5分) 

答:

防止该头文件被重复引用。

2、#include<

filename.h>

和#include“filename.h”有什么区别?

对于#include<

,编译器从标准库路径开始搜索filename.h 

对于#include 

“filename.h”,编译器从用户的工作路径开始搜索filename.h

3、const有什么用途?

(请至少说明两种)(5分) 

(1)可以定义const常量 

(2)const可以修饰函数的参数、返回值,甚至函数的定义体。

被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在c++程序中调用被c编译器编译后的函数,为什么要加extern“c”?

(5分) 

c++语言支持函数重载,c语言不支持函数重载。

函数被c++编译后在库中的名字与c语言的不同。

假设某个函数的原型为:

voidfoo(intx,inty);

该函数被c编译器编译后在库中的名字为_foo,而c++编译器则会产生像_foo_int_int之类的名字。

c++提供了c连接交换指定符号extern“c”来解决名字匹配问题。

四、有关内存的思考题(每小题5分,共20分) 

一. 

voidgetmemory(char*p) 

p=(char*)malloc(100);

voidtest(void) 

char*str=null;

getmemory(str);

strcpy(str,"

helloworld"

);

printf(str);

请问运行test函数会有什么样的结果?

试题传入getmemory(char*p)函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完char*str=null;

getmemory(str);

后的str仍然为null;

二. 

char*getmemory(void) 

charp[]="

;

returnp;

str=getmemory();

可能是乱码。

charp[]="

的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。

这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

三. 

voidgetmemory2(char**p,intnum) 

p=(char*)malloc(num);

getmemory(&

str,100);

hello"

(1)能够输出hello

(2)test函数中也未对malloc的内存进行释放。

(3)getmemory避免了试题1的问题,传入getmemory的参数为字符串指针的指针,但是在getmemory中执行申请内存及赋值语句 

p=(char*)malloc(num);

后未判断内存是否申请成功,应加上:

if(*p==null){ 

 } 

四. 

char*str=(char*)malloc(100);

strcpy(str,“hello”);

free(str);

if(str!

=null) 

{

strcpy(str,“world”);

执行char*str=(char*)malloc(100);

后未进行内存是否申请成功的判断;

另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:

str=null;

五、编写strcpy函数(10分) 

已知strcpy函数的原型是 

char*strcpy(char*strdest,constchar*strsrc);

其中strdest是目的字符串,strsrc是源字符串。

(1)不调用c++/c的字符串库函数,请编写函数strcpy 

char*strcpy(char*strdest,constchar*strsrc);

assert((strdest!

=null)&

(strsrc!

=null));

//2分

char*address=strdest;

while((*strdest++=*strsrc++)!

=‘/0’) 

null;

returnaddress;

(2)strcpy能把strsrc的内容复制到strdest,为什么还要char*类型的返回值?

为了实现链式表达式。

//2分 

例如intlength=strlen(strcpy(strdest,“helloworld”));

六、编写类string的构造函数、析构函数和赋值函数(25分) 

已知类string的原型为:

classstring

{

public:

string(constchar*str=null);

//普通构造函数

string(conststring&

other);

//拷贝构造函数

~string(void);

//析构函数

string&

operate=(conststring&

//赋值函数

private:

char 

*m_data;

//用于保存字符串

};

请编写string的上述4个函数。

标准答案:

//string的析构函数 

string:

:

~string(void) 

//3分

delete[]m_data;

//由于m_data是内部数据类型,也可以写成deletem_data;

}

//string的普通构造函数 

string(constchar*str) 

//6分

if(str==null) 

m_data=newchar[1];

//若能加null判断则更好

*m_data=‘/0’;

else

intlength=strlen(str);

m_data=newchar[length+1];

//若能加null判断则更好 

strcpy(m_data,str);

//拷贝构造函数 

other) 

intlength=strlen(other.m_data);

//若能加null判断则更好 

strcpy(m_data,other.m_data);

//赋值函数 

string&

perate=(conststring&

//13分

//

(1)检查自赋值 

//4分

if(this==&

other)

return*this;

//

(2)释放原有的内存资源//3分 

//(3)分配新的内存资源,并复制内容//3分

//若能加null判断则更好

//(4)返回本对象的引用 

return*this;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1