CC++语言笔试面试题目含答案1.docx
《CC++语言笔试面试题目含答案1.docx》由会员分享,可在线阅读,更多相关《CC++语言笔试面试题目含答案1.docx(24页珍藏版)》请在冰点文库上搜索。
CC++语言笔试面试题目含答案1
C_C++语言笔试面试题目含答案
C语言试题一:
单项选择题
1.
voidExample(characHello){
printf(\ return;}
voidmain(){
characHello=\ Example(acHello); return;}
的输出是()
A4 B5 C6 D不确定
2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作。
() A.正确B.错误3.int*(*ptr)();
则以下叙述中正确的是() A)ptr是指向一维组数的指针变量 B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是指向函数的指针,该函数的返回值是指向int型数据的指针4.此函数实现把32位IP地址(网络序)以字符串的方式打印出来:
char*IpAddr2Str(unsignedlongulIpAddr){
charszIpAddr[32];
unsignedlongulLocIpAddr=ntohl(ulIpAddr);//把网络序转话为主机序 (void)VOS_sprintf(szIpAddr,\
(ulLocIpAddr>>16)&0xff,(ulLocIpAddr>>8)&0xff,ulLocIpAddr&0xff);
returnszIpAddr;}
下面描述正确的是:
A、数组szIpAddr空间不够;
B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;5.
#defineOK 0#defineERR 1
#defineERROR (-1)#defineBUFFER_SIZE 256
char*GetMemory(unsignedlongulSize){
char*pcBuf=NULL;
pcBuf=(char*)malloc(ulSize); if(NULL==pcBuf) {
returnERROR; }
returnpcBuf;}
voidTest(void){
char*pszBuf=NULL;
pszBuf=GetMemory(BUFFER_SIZE); if(NULL!
=pszBuf) {
strcpy(pszBuf,\ printf(pszBuf); free(pszBuf); }
return;}
如下描述正确的是:
A、pszBuf指向的内存不能超过255
B、GetMemory函数的异常分支返回了-1,是一个非法地址C、GetMemory中异常分支没有释放空间;
D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放
6、#include\
unsignedshort*Sum(unsignedchara,unsignedcharb){
unsignedshorts=0;
s=a+b; return&s;}
intmain(){
unsignedshort*p=NULL;unsignedchara=1,b=2;
p=Sum(a,b);
printf(\printf(\return0;}
程序执行结果是
+2=0+2=3+2=NULLD.不可预测7、设有如下定义:
BOOLgStatusA=FALSE;BOOLgStatusB=TRUE;intgVarA=100;intgVarB=100;
则执行main函数后gVarA和gVarB的值分别为(
BOOLCheckA(){
if(gStatusA){
gVarA++;}else{
gVarA--;}
returngStatusA;}
BOOLCheckB(){
if(gStatusB){
gVarB++;}else{
gVarB--;
) }
returngStatusB;}
intmain(intargc,char*argv){
if(CheckA()&&CheckB()) {
printf(“StatusOK”); } return0;}
A,99和100B,99和101C99和99D101和99
8.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。
voidVarInit(unsignedchar*pucArg){
*pucArg=1; return;}
voidTest(){
unsignedlongulGlobal; VarInit(&ulGlobal); printf(\ return;}
下面描述正确的是:
A.给VarInit()函数传递的参数类型错误输出格式错误
C.传给VarInit()中参数pucArg的值为空指针9、
voidAddFunc(unsignedinta,unsignedintb,unsignedint*c){
*c=a+b;}
voidmain(void){
unsignedchare=200;unsignedcharf=100;unsignedcharg=0;
AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&g);
printf(\}
下面说法正确的是:
A对g进行类型转换导致函数调用时写内存越界;B对e、f进行类型转换导致函数调用时写内存越界;C函数调用时不能改变g的值。
10、voidmain(void){
unsignedchara=200; unsignedcharb=100; unsignedcharc=0; c=a+b;
printf(\}
下列程序的执行结果为()A300300B4444C30044D44300
11、在X86,VC++环境下,有下列程序#include
intmain(){
charcA;
unsignedcharucB;unsignedshortusC;
cA=128;ucB=128;
usC=cA+ucB;printf(\
usC=cA+(short)ucB;printf(\
usC=(unsignedchar)cA+ucB;printf(\
usC=cA+(char)ucB;printf(\
return0;
{
ASSERT(0); return; }
*ppszBuf=(char*)malloc(BUFFER_SIZE); return;}
voidTest(void){
char*pszBuf=NULL; GetMemory(&pszBuf);
strcpy(pszBuf,\ printf(\ free(pszBuf); return;}
下面说法正确的是:
A、pszBuf的值永远为NULL;B、malloc内存后没有判断是否成功;C、strcpy拷贝越界;
D、GetMemory无法将申请的内存地址传递给pszBuf;
24、请问下面函数中1、2、3应该填入什么语句才合理?
pMsg=GetMessageBuffer(malloc_len);if(NULL==pMsg){
____1___returnERROR;}
fillMessage(pMsg);sendMessage(pMsg);
ptmpMsg=GetMessageBuffer(malloc_len);if(NULL==ptmpMsg){
____2___returnERROR;}
FillMessage(ptmpMsg);SendMessage(ptmpMsg);free(pMsg);____3___returnOK;}
25.以下叙述中不正确的是()
A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是在栈中保存
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)
26.全局变量可以定义在被多个.C文件包含着的头文件中。
()A.正确B.错误
27.在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。
如果临时变量占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。
()A.正确B.错误
28.局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。
()A.正确B.错误29.设有如下定义:
unsignedlongpulArray={6,7,8,9,10}; unsignedlong*pulPtr; 则下列程序段的输出结果为() pulPtr=pulArray; *(pulPtr+2)+=2;
printf(\
A)8,10 B)6,8 C)7,9 D)6,1030.structstu {
int num; char name[10]; int age; };
voidFun(structstu*p) {
printf(\ return; }
voidmain() {
structstustudents[3]={{9801,\ {9802,\ {9803,\ Fun(students+2); return; }
输出结果是()
A)Zhang B)Zhao C)Wang D)1831.以下程序运行后,输出结果是()voidmain(){
char*szStr=\ szStr+=2;
printf(\ return;}
Acde B字符c的ASCLL码值C\这个常串中字符c所在的地址 D出错32.设有以下宏定义:
#define N 3
#define Y(n) ((N+1)*n)/*这种定义在编程规范中是不允许的,如果你在实际中这么用了,请自打手心三下*/
则执行语句:
z=2*(N+Y(5+1));后,z的值为() A)出错 B)42 C)48 D)5433、有如下宏定义和结构定义#defineMAX_SIZEA+Bstruct_Record_Struct{
unsignedcharEnv_Alarm_ID:
4;
unsignedcharpara1:
2; unsignedcharstate; unsignedcharavail:
1;}*Env_Alarm_Record;
pointer=(struct_Record_Struct*)malloc(sizeof(struct_Record_Struct)*MAX_SIZE);
当A=2,B=3时pointer分配( )个字节的空间。
注意:
机器是按照4字节对齐A)20 B)15C)11D)9
34、请问下面题目中a,b,c输出值为多少?
A、10,210,30B、100,210,300C、110,210,310D、100,210,30E、110,200,30
#include
#defineFUNC(A) A++;\\ A*=10;
intmain(intargc,char*argv){
inta=10;intb=20;intc=30;
if(a>10) FUNC(a);
if(b>=20) FUNC(b);
if(c>30){
FUNC(c);}
printf(\return0;}
35.在X86下,有下列程序 #include voidmain() {
union {
int k; char i[2]; }*s,a; s=&a;
s->i[0]=0x39; s->i[1]=0x38; printf(\ }
输出结果是()
A)3839 B)3938 C)380039 D)36、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){
if(NULL==ppMem) {
return-1; }
if(iLenreturn0; }
elseif(iLen*ppMem=malloc(iLen); returniLen; } else {
*ppMem=malloc(MAX_MEM_SIZE); returnMAX_MEM_SIZE; } }
voidmain(){
char*pMyMem; inti; intj;
i=GetMem(i,(void**)&pMyMem); if(NULL!
=pMyMem)
不可预知
{
for(j=0;jpMyMem[j]=0; } }}
下面说法正确的有;
A、因为pMyMem未初始化,main函数中的GetMem可能会返回-1;
B、因为i未初始化,main函数中GetMem可能会返回比MAX_MEM_SIZE大的值;C、因为pMyMem未初始化,for循环内的赋值操作可能会导致写内存异常;D、无论pMyMem,i,j为何值时,main函数内都不会出现写内存异常;37、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){
if(iLenreturn-1; }
elseif(0==iLen) {
return0; }
elseif(iLen*ppMem=malloc(iLen); returniLen; } else {
*ppMem=malloc(MAX_MEM_SIZE); returnMAX_MEM_SIZE; } }
voidmain(){
char*pMyMem; inti,k; unsignedintj;
j=GetMem(i,&pMyMem); if(j>0) {
for(k=0;kpMyMem[k]=0; } }}
下面说法正确的有:
A、只要将pMyMem初始化为NULL,可以避免main函数内的for循环出现写内存异常;B、虽然i和pMyMem均未初始化,只要将if(j>0)改为if((0C、虽然i和pMyMem均未初始化,只要将main函数内的for循环比较k二:
多项选择题
1.定义结构体时有下面几种说法,请指出正确的(多选):
___
A、结构体中的每个部分,最好进行四字节对齐;B、结构体的总长度最好是四字节对齐;C、结构中成员的存放不用考虑字节对齐情况;
2.0x12345678在采用BigEndian中内存的排列顺序是______,在采用LittleEndian内存中的排列顺序是______.
(答案从左到右内存地址依次增加)
345678 127856 563412 7812343.下面程序期望输出str=helloworld:
char*GetStr(char*p){
p=\ returnp;}
voidmain(){
char*str=NULL;
if(NULL!
=GetStr(str)) {
printf(\
} return;}
下面描述正确的是:
A、str始终为NULL;
B、函数GetStr返回值始终不为空;
C、该程序无法得到预期的输出结果,因为GetStr函数无法将字符串地址带给实参;
4、下面程序期望得到g_Variable的值,并打印出来。
unsignedcharg_Variable;
voidGetGlobalAddr(unsignedchar*p){
p=&g_Variable;}
voidmain(){
unsignedchar*temp=NULL_PTR;
GetGlobalAddr(temp);
printf(\ return;}
下面说法正确的是:
A对p强制类型转换错误;
B调用函数时,局部变量p存在于栈中;Cp值的改变不会影响temp;
D调用函数后,temp的值被改变为g_Variable的地址。
5、
#defineMAX_LEN2
UC*ConvertCode(UC*pByte,UCnum){
ULi=0;
UCstrTemp[MAX_LEN];
if(NULL==pByte) {
returnNULL; }
memcpy(strTemp,pByte,MAX_LEN); return(UC*)strTemp;
}
voidmain(void){
UCstr[MAX_LEN]; UC*p;
str[0]=0x12; str[1]=0x34;
p=ConvertCode(str,sizeof(str)); printf(\ return;}
下面查错的说明中,描述正确的是:
A、输入参数p_byte为空指针B、函数ConvertCode返回值没有判断
C、没有判断p_byte指向空间和MAX_LEN的大小D、返回局部变量地址
6.下列定义正确的有(多选):
()A:
char*pcPtr=\B:
charpc[4]=\C:
charpc=\D:
charpc='abcd';
E:
charpc={'a','b','c','d','\\0'};F:
charpc='a''b''c''d';7.
voidGetMemory(char**ppcChar,intiLength){
if(NULL==ppcChar) {
return; }
*ppcChar=(char*)malloc(iLength); return;}
voidmain(intargc,char*argv){
char*szStr=NULL; intiLen=100;
GetMemory(&szStr,iLen);
if(NULL!
=szStr) {
strcpy(szStr,\ printf(szStr); } return;}
下面描述正确的是():
A、iLength应该判断是否大于0;B、程序中使用魔鬼数字;
C、当szStr不为空时,没有释放分配的内存;D、printf(szStr)无法输出字符串
8.请指出下面程序问题#defineMAX_LEN254
unsignedchar Array[MAX_LEN];intTest(void){
inti;
for(i=0;iArray[i]=i; } return;}
下面说法正确的是:
A、i=MAX_LEN时,数组越界B、argv参数形式错误C、i=MAX_LEN时,赋值溢出D、return无返回值
9、#include#include#include#defineMAX_MSG_LEN2048BOOL MaxMsgFlag=FALSE;char*GetBuffer(intmsg_len){
char*ptr=NULL; intlen=msg_len; ptr=(char*)malloc(len); if(NULL==ptr)
{
returnNULL; }
returnptr;}
intmain(intargc,char*argv){
intmsg_len; char*pMsg;
if(TRUE==MaxMsgFlag) {
msg_len=MAX_MSG_LEN; }
pMsg=getBuffer(msg_len); if(NULL!
=pMsg) {
strcpy(pMsg,\ printf(\ free(pMsg); }
return0;}
上面的程序存在问题,下面描述正确的是A、函数getBuffer应该判断入参msg_len是否大于0。
B、按照编程规范,函数main中pMsg应该赋初值C、函数main中msg_len没有赋初值
三:
填空题
1.
char*pcColor=\characColor=\strlen(pcColor)=_____strlen(acColor)=_____sizeof(pcColor)=_____sizeof(acColor)=_____2.
charstr=\char*p=str;intn=1000;请计算
sizeof(str)=____________
sizeof(p)=______________ sizeof(n)=______________*pucCharArray[10][10]; typede