




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言編程基礎(chǔ)考試[考前說明]本題目中不考慮頭文件引用問題(假定已經(jīng)包含正確的頭文件),C語言的標準函數(shù)都可用;如果不特別說明,假定程序運行環(huán)境為:操作系統(tǒng)Windows2000,VC6.0編譯環(huán)境,缺省為四字節(jié)對齊X86(80586)CPU處理器(32位小字節(jié)序處理器).一、單選題1、 給出以下定義:characX[]="abcdefg";characY[]={'a','b','c','d','e','f','g'};則正確的敘述為()數(shù)組acX和數(shù)組acY等價 B)數(shù)組acX和數(shù)組acY的長度相同C)數(shù)組acX的長度大于數(shù)組acY的長度 D)數(shù)組acX的長度小于數(shù)組Y的長度2、 voidexample(characHello[]){printf("%d",sizeof(acHello));return;}voidmain(){characHello[]="hello";example(acHello);return;}的輸出是()A4B5 C6 D不確定3、以下敘述中不正確的是( )在不同的函數(shù)中可以使用相同名字的變量函數(shù)中的形式參數(shù)是在棧中保存在一個函數(shù)內(nèi)定義的變量只在本函數(shù)范圍內(nèi)有效在一個函數(shù)內(nèi)的復(fù)合語句中定義的變量在本函數(shù)范圍內(nèi)有效(復(fù)合語句指函數(shù)中的成對括號構(gòu)成的代碼)4、 設(shè)有如下定義:unsignedlongpulArray[]={6,7,8,9,10};unsignedlong*pulPtr;則下列程序段的輸出結(jié)果為()pulPtr=pulArray;
*(pulPtr+2)+=2;printf("%d,%d\n",*pulPtr,*(pulPtr+2));A)8,10B)6,8C)7,9D)6,105、 有以下程序段characArr[]="ABCDE";char*pcPtr;for(pcPtr=acArr;pcPtr<acArr+5;pcPtr++)printf("%s\n",pcPtr);}return;輸出結(jié)果是()C)EDCC)EDCBAD)ABCDEBCDECDEDEEBCDE6、voidexample(){inti;characNew[20];for(i=0;i<10;i++){acNew[i]='0';}printf("%d\n",strlen(acNew));return;}的輸出為(D)A0B10 C11 D不確定7、 switch(c)中的c的數(shù)據(jù)類型可以是char、long、float、unsigned、bool.()正確B.錯誤8、 全局變量可以定義在被多個.C文件包含著的頭文件中。()正確B.錯誤9、 structstu{int num;char name[10];
intage;};voidfun(structstu*p){printf("%s\n",(*p).name);return;}voidmain(){structstustudents[3]={{9801,"Zhang",20},{9802,"Wang",19},{9803,"Zhao",18}};fun(students+2);return;}輸出結(jié)果是()C)Wang D)18A)Zhang B)ZhaoC)Wang D)1810、以下程序運行后,輸出結(jié)果是(voidmain(){char*szStr="abcde";szStr+=2;printf("%lu\n",szStr);return;}B字符B字符c的ASCLL碼值D出錯C"abcde"這個常串中字符c所在的地址11、在X86下,有下列程序#include<stdio.h>voidmain(){union{int k;char i[2];}*s,a;s=&a;s->i[0]=0x39;s->i[1]=0x38;printf("%x\n",a.k);輸出結(jié)果是()A)3839 B)3938 C)380039 D)不可預(yù)知12、 網(wǎng)絡(luò)上傳輸?shù)淖止?jié)序默認是大字節(jié)的,如果主機是小字節(jié)序,在網(wǎng)絡(luò)通信時則須進行字節(jié)序轉(zhuǎn)換;如果主機是大字節(jié)序,為了程序的一致性及可移植性,最好也在程序中加上字節(jié)序轉(zhuǎn)換的操作(空操作)。()正確B.錯誤13、 voidexample(){inti;characNew[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};for(i=0;i<10;i++){acNew[i]='0';}printf("%d\n",strlen(acNew));return;}的輸出為:()A0B10 C11 D不確定14、 在函數(shù)內(nèi)部定義的變量(靜態(tài)變量、寄存器變量等特殊變量除外)的內(nèi)存是TOC\o"1-5"\h\z在棧內(nèi)存中,所以在定義函數(shù)內(nèi)部的變量的時候,一定要保證棧不能夠溢出。如果臨時變量占用空間較大,應(yīng)該使用內(nèi)存申請的方式,這樣該變量指向的內(nèi)存就是在堆內(nèi)存中了。( )A.正確B.錯誤15、 局部變量可以和全局變量重名,編譯的時候不會出現(xiàn)錯誤,但一旦不小心,就可能導(dǎo)致使用錯誤變量,所以在定時局部變量的時候,不要和全局變量重名。( )A.正確B.錯誤16、 設(shè)有以下宏定義:#define N 3#define Y(n) ((N+1)*n)/*這種定義在編程規(guī)范中是嚴格禁止的*/則執(zhí)行語句:z=2*(N+Y(5+1));后,z的值為()A)出錯 B)42 C)48 D)5417、int*(*ptr)();則以下敘述中正確的是()A)ptr是指向一維組數(shù)的指針變量ptr是指向int型數(shù)據(jù)的指針變量ptr是指向函數(shù)的指針,該函數(shù)返回一個int型數(shù)據(jù)ptr是指向函數(shù)的指針,該函數(shù)的返回值是指向int型數(shù)據(jù)的指針18、0x12345678在采用BigEndian中內(nèi)存的排列順序是 ,在采用LittleEndian內(nèi)存中的排列順序是 .(答案從左到右內(nèi)存地址依次增加)A.12345678B.34127856C.78563412D.5678123419、 請指出下面程序問題#defineMAX_LEN254unsignedcharArray[MAX_LEN];intmain(intargc,char*argv[]){inti;for(i=0;i<=MAX_LEN;i++){Array[i]=i;}return;}程序的錯誤為():A、 i=MAX_LEN時,數(shù)組越界B、 argv參數(shù)形式錯誤C、 i=MAX_LEN時,賦值溢出D、 return無返回值20、 #defineBUFFER_SIZE 256voidGetMemory(char**ppszBuf){if(NULL==ppszBuf){ASSERT(0);return;}*ppszBuf=(char*)malloc(BUFFER_SIZE);return;}voidTest(void){char*pszBuf=NULL;GetMemory(&pszBuf);strcpy(pszBuf,"helloworld\r\n");printf("%s",pszBuf);free(pszBuf);return;}下面說法正確的是():A、 pszBuf的值永遠為NULL;B、 malloc內(nèi)存后沒有判斷是否成功;C、 strcpy拷貝越界;D、 GetMemory無法將申請的內(nèi)存地址傳遞給pszBuf;21、 如下程序用于把"blue"字符串打印出來:voidPrintBLUE(){charpcBlue[]={'b','l','u','e'};printf("%s",pcBlue);return;}下面描述正確的是():A、 pcBlue數(shù)組初始化時沒有字符串結(jié)束符;B、 數(shù)組pcBlue定義時必須指明長度;22、 請指出下面這段代碼中的錯誤:unsignedlongFUNC_B(unsignedlongulCount){unsignedlongulSum=0;while(0<=ulCount){ulSum+=ulCount;ulCount--;}returnulSum;}voidtest(void){unsignedlongulTotal=0;ulTotal=FUNC_B(10);printf("%lu",ulTotal);}面描述正確的是():A、 while循環(huán)判斷始終為真;B、 test打印輸出55;C、 循環(huán)體內(nèi)在執(zhí)行2的32次方后,ulSum開始溢出翻轉(zhuǎn);23、 此函數(shù)實現(xiàn)把32位IP地址(網(wǎng)絡(luò)序)以字符串的方式打印出來:char*IpAddr2Str(unsignedlongulIpAddr){charszIpAddr[32];unsignedlongulLocIpAddr=ntohl(ulIpAddr);//把網(wǎng)絡(luò)序轉(zhuǎn)話為主機序(void)VOS_sprintf(szIpAddr,"%d.%d.%d.%d",ulLocIpAddr>>24,(ulLocIpAddr>>16)&0xff,(ulLocIpAddr>>8)&0xff,ulLocIpAddr&0xff);returnszIpAddr;}下面描述正確的是():A、 數(shù)組szIpAddr空間不夠;B、 函數(shù)返回局部數(shù)組szIpAddr變量地址;C、 輸出的IP地址次序顛倒;24、 如下程序用于把"blue"字符串返回:char*GetBLUE(void){char*pcColor;char*pcNewColor;pcColor="blue";pcNewColor=(char*)malloc(strlen(pColor));if(NULL==pcNewColor){returnNULL;}strcpy(pcNewColor,pcColor);returnpcNewColor;}下面描述正確的是:A、 字符串“blue”存放在棧內(nèi);B、 函數(shù)GetBLUE返回局部變量地址;C、 內(nèi)存空間分配長度不夠,strcpy函數(shù)拷貝越界;25、 如下代碼實現(xiàn)中,F(xiàn)UNC_A為每毫秒定時執(zhí)行的函數(shù),在該函數(shù)中,需要實現(xiàn)每TIME_INTERVAL毫秒執(zhí)行一次DO_Something()的操作。請指出段代碼中的錯誤:#defineULONGunsignedlong#defineTIME_INTERVAL200voidDO_Something(void){/* */return;}voidFUNC_A(){staticULONGulPreCall=0;ULONGulNowInMsHigh=0;ULONGulNowInMsLow=0;(VOID)VOS_Tm_Now(&ulNowInMsHigh,&ulNowInMsLow);/*獲取當(dāng)前的時間,以毫秒為單位,用64bits表示,ulNowInMsHigh為高32位,ulNowInMsLow為低32位*if((0==ulPreCall)||(ulNowInMsLow>=(ulPreCall+TIME_INTERVAL))){ulPreCall=ulNowInMsLow;}else{return;}DO_Something();return;}A、 函數(shù)FUNC_A第一次被調(diào)用時,不執(zhí)行Do_Something()操作;B、 函數(shù)FUNC_A功能在一段時間后失效,因為ulNowInMsLow溢出翻轉(zhuǎn);C、 ulPreCall不應(yīng)該定義為靜態(tài)變量;26、下面的代碼中,函數(shù)Test執(zhí)行完畢后,希望輸出1。請指出錯誤:voidVarInit(unsignedchar*pucArg){*pucArg=1;return;}voidTest(){unsignedlongulGlobal;VarInit(&ulGlobal);printf("%lu",ulGlobal);return;}下面描述正確的是:()給VarInit()函數(shù)傳遞的參數(shù)類型錯誤printf()輸出格式錯誤傳給VarInit()中參數(shù)pucArg的值為空指針TOC\o"1-5"\h\z27、#defineOK 0#defineERR 1#defineERROR (-1)#defineBUFFER_SIZE 256char*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,"HelloWorld!\r\n");printf(pszBuf);free(pszBuf);}return;}如下描述正確的是:A、 pszBuf指向的內(nèi)存不能超過255B、 GetMemory函數(shù)的異常分支返回了-1,是一個非法地址C、 GetMemory中異常分支沒有釋放空間;D、 pcBuf為局部指針,指向的內(nèi)存將在GetMemory被調(diào)用后釋放28、 voidAddFunc(unsignedinta,unsignedintb,unsignedint*c){*c=a+b;}voidmain(void){unsignedchare=200;unsignedcharf=100;unsignedcharg=0;AddFunc((unsignedint)e,(unsignedint)f,(unsignedint*)&g);printf("%d",g);}下面說法正確的是():A對g進行類型轉(zhuǎn)換導(dǎo)致函數(shù)調(diào)用時寫內(nèi)存越界;B對e、f進行類型轉(zhuǎn)換導(dǎo)致函數(shù)調(diào)用時寫內(nèi)存越界;C函數(shù)調(diào)用時不能改變g的值。29、#defineNULL0#defineMEM_OK0#defineMEM_ERR1enumENUM_STAT_ITEM{STAT_ITEM0,STAT_ITEM1,STAT_ITEM_BUTT};typedefstructtag_PERM_COUNT_STAT_INFO{unsignedshortstat_item;unsignedshrotnumber;}_SPermCountStatInfo;_SPermCountStatInfopcsi[STAT_ITEM_BUTT]={{STAT_ITEM0, 16000},{STAT_ITEM1, 50000},}unsignedlong*pulStatDataBuffer=NULL;unsignedshortAllocPermMemory(void){unsignedshortusBufferSize=0;unsignedshortusLoop=0;for(usLoop=0;usLoop<STAT_ITEM_BUTT;usLoop++){usBufferSize+=pcsi[usLoop].number;}pulStatDataBuffer=(unsignedlong*)malloc(sizeof(unsignedlong)*usBufferSize);if(NULL==pulStatDataBuffer){returnMEM_ERR;}returnMEM_OK;}下面說法正確的是():Aunsignedshort類型不能表示循環(huán)體中將16000與50000相加的和66000B數(shù)組pcsi的number域是unsignedshort類型,不能表示50000這么大的數(shù)字C循環(huán)條件應(yīng)該改為usLoopv=STAT_ITEM_BUTT30、設(shè)有如下定義:BOOLgstatusA=FALSE;BOOLgstatusB=TRUE;intgvarA=100;intgvarB=100;則執(zhí)行main函數(shù)后后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;}99和10099和10199和99101和9931、請問下面函數(shù)中1、2、3應(yīng)該填入什么語句才合理?()A、 不添,不添,不添B、 free(pMsg);,free(ptmpMsg);,不添C、 free(pMsg);,free(ptmpMsg);,free(ptmpMsg);D、 不添,free(pMsg);,free(ptmpMsg);E、 free(pMsg);,free(pMsg);,free(ptmpMsg);F、 不添,不添,free(ptmpMsg);#defineCOMM_MSG_LEN100char*get_message_buffer(intmalloc_len){char*ptr=NULL;ptr=(char*)malloc(malloc_len)returnptr;}intfunc_test(void){intmalloc_len=COMM_MSG_LEN;char*pMsg=NULL;char*ptmpMsg=NULL;pMsg=get_message_buffer(malloc_len);if(NULL==pMsg){ 1___returnERROR;}fillMessage(pMsg);sendMessage(pMsg);ptmpMsg=get_message_buffer(malloc_len);if(NULL==ptmpMsg){ 2___returnERROR;fillMessage(ptmpMsg);sendMessage(ptmpMsg);free(pMsg); 3___returnOK;}32、 請問下面題目中a,b,c輸出值為多少?()A、 10,210,30B、 100,210,300C、 110,210,310D、 100,210,30E、 110,200,30#include<stdio.h>#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("a=%d,b=%d,c=%d\r\n",a,b,c);return0;}33、 #defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){if(NULL==ppMem){return-1;}if(iLen<=0){return0;}elseif(iLen<MAX_MEM_SIZE){*ppMem=malloc(iLen);returniLen;}else{*ppMem=malloc(MAX_MEM_SIZE);returnMAX_MEM_SIZE;}}voidtest(){char*pMyMem;inti;intj;i=GetMem(i,(void**)&pMyMem);if(NULL!=pMyMem){for(j=0;j<i;j++){pMyMem[j]=0;}}}下面說法正確的有;()A、 因為pMyMem未初始化,test函數(shù)中的GetMem可能會返回一1;B、 因為i未初始化,test函數(shù)中GetMem可能會返回比MAX_MEM_SIZE大的值;C、 因為pMyMem未初始化,for循環(huán)內(nèi)的賦值操作可能會導(dǎo)致寫內(nèi)存異常;D、 無論pMyMem,i,j為何值時,test函數(shù)內(nèi)都不會出現(xiàn)寫內(nèi)存異常;34、#defineMAX_MEM_SIZE100intGetMem(intiLen,void**ppMem){if(iLen<0){return-1;}elseif(0==iLen){return0;}elseif(iLen<MAX_MEM_SIZE){*ppMem=malloc(iLen);returniLen;}else{*ppMem=malloc(MAX_MEM_SIZE);returnMAX_MEM_SIZE;}}voidtest(){char*pMyMem;inti,k;unsignedintj;j=GetMem(i,&pMyMem);if(j>0){for(k=0;k<i;k++){pMyMem[k]=0;}}}下面說法正確的有:A、 只要將pMyMem初始化為NULL,可以避免test函數(shù)內(nèi)的for循環(huán)出現(xiàn)寫內(nèi)存異常;B、 雖然i和pMyMem均未初始化,只要將if(j>0)改為if((0vj)&&(jv=MAX_MEM_SIZE)),可以避免出現(xiàn)for循環(huán)內(nèi)寫內(nèi)存異常;C、 雖然i和pMyMem均未初始化,只要將test函數(shù)內(nèi)的for循環(huán)比較由kvi改為kvj,可以避免出現(xiàn)for循環(huán)內(nèi)寫內(nèi)存異常;D、 上面三種說法都不對。35、#defineBUF_LEN2048structAAA{ULONGulLen; 〃指示buf中實際占用字節(jié)數(shù)CHARbuf[BUF_LEN];//存儲緩沖區(qū)};函數(shù)PrintBufLen的作用是打印出結(jié)構(gòu)體中的buf的實際占用長度,有下面兩種實現(xiàn)方法:方法一:VOIDPrintBufLen(structAAA*pBuf){if(NULL==pBuf){printf("Error,pBufisNull.\n");return;}printf("len=%u\n",pBuf->ulLen);return;}方法二:VOIDPrintBufLen(structAAABuf){printf("len=%u\n",Buf.ulLen);return;}以下說法只有一個正確的是:()A:優(yōu)選方法一,原因是以指針作為入?yún)?,減少函數(shù)參數(shù)壓棧的系統(tǒng)開銷。B:優(yōu)選方法二,原因是可以不做入?yún)⒑戏ㄐ耘袛啵蝗菀壮鲥e。C:兩種方法差不多,可以任意選擇。D:以上說法都不對。36、voidmain(void){unsignedchara=200;unsignedcharb=100;unsignedcharc=0;c=a+b;printf("%d%d",a+b,c);}下列程序的執(zhí)行結(jié)果為(C)A300300B4444C30044D4430037、 有如下宏定義和結(jié)構(gòu)定義#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);當(dāng)A=2,B=3時pointer分配()個字節(jié)的空間。注意:機器是按照4字節(jié)對齊20 B)15C)llD)938、 在X86,VC++6.0環(huán)境下,有下列程序#include<stdio.h>intmain(){char c;unsignedcharuc;unsignedshortus;c=128;uc=128;us=c+uc;printf("0x%x",us);us=c+(short)uc;printf("0x%x",us);us=(unsignedchar)c+uc;printf("0x%x",us);us=c+(char)uc;printf("0x%x",us);return0;輸出結(jié)果是()0x00x00x100OxffOO0x00x1000x1000xff000x00x1000x1000x00x00x00x1000x039、#include"stdio.h"unsignedshort*sum(unsignedchara,unsignedcharb){unsignedshorts=0;s=a+b;return&s;}intmain(){unsignedshort*p=NULL;unsignedchara=1,b=2;p=sum(a,b);printf("%u+%u",a,b);printf("=%u\n",*p);return0;}程序執(zhí)行結(jié)果是()1+2=0 B.1+2=3C.1+2=NULLD.不可預(yù)測二、多選題40、voidGetMemory(char**ppcChar,intiLength){if(NULL==ppcChar){return;}*ppcChar=(char*)malloc(iLength);return;}voidmain(){char*szStr=NULL;GetMemory(&szStr,100);if(NULL!=szStr){strcpy(szStr,"hello");printf(szStr);}return;}下面描述正確的是():A、 iLength應(yīng)該判斷是否大于0;B、 程序中使用魔鬼數(shù)字;C、 當(dāng)szStr不為空時,沒有釋放分配的內(nèi)存;D、 printf(szStr)無法輸出字符串41、 下面程序期望輸出str=helloworld:char*GetStr(char*p){p="helloworld";returnp;}voidmain(){char*str=NULL;if(NULL!=GetStr(str)){printf("\r\nstr=%s",str);}return;}下面描述正確的是:A、 Str始終為NULL;B、 函數(shù)GetStr返回值始終不為空;C、 該程序無法得到預(yù)期的輸出結(jié)果,因為GetStr函數(shù)無法將字符串地址帶給實參;42、 下面程序期望得到global_variable的值,并打印出來。unsignedcharglobal_variable;voidGetGlobalAddr(unsignedchar*p){p=&global_variable;}voidmain(){unsignedchar*temp=NULL_PTR;GetGlobalAddr(temp);printf("\r\nGotglobalvariablevalue=%u",*temp);return;}下面說法正確的是():A對p強制類型轉(zhuǎn)換錯誤;B調(diào)用函數(shù)時,局部變量p存在于棧中;Cp值的改變不會影響temp;D調(diào)用函數(shù)后,temp的值被改變?yōu)間lobal_variable的地址。43、 #defineMAX_LEN2_UC*ConvertCode(_UC*p_byte,_UCnum){_ULi=0;_UCstrTemp[MAX_LEN];if(NULL==p_byte){returnNULL;}memcpy(strTemp,p_byte,MAX_LEN);return(_UC*)strTemp;}voidmain(void){_UCstr[MAX_LEN];_UC*p;str[0]=0x12;str[1]=0x34;p=ConvertCode(str,MAX_LEN);printf("%s",p);return0;}下面說明中,描述正確的是():A、 輸入?yún)?shù)p_byte為空指針B、 函數(shù)ConvertCode返回值沒有判斷C、 沒有判斷p_byte空間和MAX_LEN的大小D、 返回局部變量地址44、 #include<stdio.h>#include<malloc.h>#include<string.h>#defineMaxMsgLen2048BOOLMaxMsgFlag=FALSE;char*get_buffer(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=MaxMsgLen;}pMsg=get_buffer(msg_len);if(NULL!=pMsg){strcpy(pMsg,"Ilovethisgame!");printf("%s",pMsg);free(pMsg);}return0;}上面的程序存在問題,下面描述正確的是()A、 函數(shù)get_buffer沒有判斷入?yún)sg」en是否大于等于0。B、 函數(shù)main中pMsg沒有賦初值C、 函數(shù)main中msg_len沒有賦初值D、 函數(shù)main中free(pMsg)后,沒有把pMsg置為NULL。45、請指出下面程序的錯誤:()voidTest(void){char*szStr=(char*)malloc(100);if(NULL==szStr){return;}strcpy(szStr,"hello");free(szStr);if(NULL!=szStr){strcpy(szStr,"world");printf(szStr);}return;}A、 strepy沒有將結(jié)尾符拷貝到szStr中B、 對釋放空間的指針進行拷貝操作C、 printf隨機打印D、 沒有返回值46、 定義結(jié)構(gòu)體時有下面幾種說法,請指出正確的A、 結(jié)構(gòu)體中的每個部分,最好進行四字節(jié)對齊;B、 結(jié)構(gòu)體的總長度最好是四字節(jié)對齊;C、 結(jié)構(gòu)中成員的存放不用考慮字節(jié)對齊情況;47、下列定義正確的有( )A:char*pcPtr 二"abed";B:charpc[4]="abed";C:charpc[]="abcd";D:charpc[]='abcd';E:charpc[]二{,a,,,b,,,c,,,d,,,\0,};F:charpc[]='a''b''c''d';三、填空:48、 ehar*peColor="blue1";characColor[]="blue1";strlen(pcColor)= strlen(acColor)= sizeof(pcColor)= sizeof(acColor)= 554649、 eharstr[]="\\\0";char*p=str;intn=1000;請計算sizeof(str)= sizeof(p)= sizeof(n)二 44
50、 UCHAR*pucCharArray[10][10];typedefunionunRec{ULONGulIndex;USHORT usLevel[6];UCHAR ucPos;}REC_S;REC_SstMax,*pstMax;四字節(jié)對齊方式時:sizeof(pucCharArray)= ,sizeof(stMax)= ,sizeof(pstMax)= ,sizeof(*pstMax)= .4001241251、 typedefunionunHead{UCHARaucSrc[6];structtagContent{UCHARucFlag[3];ULONGulNext;}Content;}HEAD_S;TOC\o"1-5"\h\z32CPU,VC編譯環(huán)境下:在強制一字節(jié)對齊情況下,請指出sizeof(HEAD_S)= ;在強制二字節(jié)對齊情況下,請指出sizeof(HEAD_S)= ;在強制四字節(jié)對齊情況下,請指出sizeof(HEAD_S)= ;8852、 UCHAR*pszTest="hello";UCHARaucTest[]="hello";請問sizeof(pszTest)= ,sizeof(*pszTest)= ,sizeof(aucTest)=1653、 structBBB{longcharshortcharshort}*p;{longcharshortcharshort}*p;lNum;*pcNamesDate;cHa[2];sBa[6];p=0x100000;p+0x1=0x (unsignedlong)p+0x1=0x (unsignedlong*)p+0x1=0x (char*)p+0x1=0x 10001810000110000410000154、在4字節(jié)對齊的情況:typedefstructtagRec{longlA1;charcA2;charcA3;longlA4;longlA5;}REC_S;voidmain(intargc,char*argv[]){REC_SstMax;printf("sizeof(stMax)=%d",sizeof(stMax));return;}輸出結(jié)果為:sizeof(stMax)= 1655、voidmain(){unsignedlongulA=0x11000000;printf("%x",*(unsignedchar*)&ulA);return;}輸出結(jié)果為:056、在VRP中,實現(xiàn)了strncpy類似的函數(shù),定義如下:#defineCHARchar#defineULONGunsignedlong#defineVOIDvoidCHAR*VOS_strncpy(CHAR*pcDest,constCHAR*szSrc,ULONGulLength){CHAR*pcPoint=pcDest;if((NULL==szSrc)||(NULL==pcDest))){returnNULL;}while(ulLength&&(*pcPoint=*szSrc))/*這里采用了在判斷語句中賦值的方式(*pcPoint二*szSrc),建議盡量不使用*/{pcPoint++;szSrc++;ulLength--;}if(!ulLength){*pcPoint='\0';}returnpcDest;}VOIDmain(VOID){CHARszStrBuf[]="1234567890";CHARszStrBuf1[]="1234567890";strncpy(szStrBuf,"ABCD",strlen("ABCD"));VOS_strncpy(szStrBuf1,"ABCD",strlen("ABCD"));printf("Str1=%s\nStr2=%s",szStrBuf,szStrBuf1);}輸出結(jié)果為:ABCD567890ABCD57、 characHello[]="hello\0world";characNew[15]={0};strcpy(acNew,acHello);strlen(acNew)= sizeof(acHello)= 1258、 typedefstructtagTest{UCHAR ucFlag;ULONG ulLen;}TEST_S;TEST_Stest[10];四字節(jié)對齊方式時:sizeof(TEST_S)= ,sizeof(test) ,8059、 structtagAAA{unsignedcharucId:1;unsignedcharucPara0:2;unsignedcharucState:6;unsignedcharucTail:4;unsignedcharucAvail;unsignedcharucTail2:4;unsignedlongulData;}AAA_S;問:AAA_S在字節(jié)對齊分別為1、4的情況下,占用的空間大小是多少?1260、#pragmapack(4)/*編譯選項,表示4字節(jié)對齊*/intmain(intargc,char*argv[]){structtagTest1{shorta;chard;longb;longc;};structtagTest2{longb;shortc;chard;longa;};structtagTest3{shortc;longb;chard;longa;};structtagTest1stT1;structtagTest2stT2;structtagTest3stT3;printf("%d%d%d",sizeof(stT1),sizeof(stT2),sizeof(stT3));return0;}#pragmapack()(編譯選項結(jié)束)請問輸出結(jié)果是: 12121661、enumENUM_A{X1,Y1,Z1=5,A1,B1};enumENUM_AenumA=Y1;enumENUM_AenumB=B1;請問enumA= ;enumB= ;1762、以下程序的輸出結(jié)果是 .#include<stdio.h>intfun(intx,inty){staticint m=0;staticint i=2;i+=m+1;m=i+x+y;returnm;}voidmain(){int j=4;int m=1;intk;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);return;81763、以下程序的輸出結(jié)果為#defineCIR(r)r*r/*請注意這種定義的缺陷,不允許這么定義*/voidmain(){inta=1;intb=2;intt;t=CIR(a+b);printf("%d\n",t);return;}564、 characHello[]="hello\0world";characNew[15]={0};memcpy(acNew,acHello,12);strlen(acNew)= sizeof(acHello)= 51265、 uniontagAAAA{struct{charucFirst;shortusSecond;charucThird;}half;longlI;}number;structtagBBBBB{charucFirst;shortusSecond;charucThird;shortusForth;}half;structtagCCCC{struct{charucFirst;shortusSecond;charucThird;}half;longlI;};在字節(jié)對齊為1下,sizeof(uniontagAAAA)、sizeof(structtagBBBBB)、sizeof(structtagCCCC)是 在字節(jié)對齊為4下,sizeof(uniontagAAAA)、sizeof(structtagBBBBB)、sizeof(structtagCCCC)是 468881266、 structtagABC{charcB;shortsC;charcD;longlA;}*pAbc;pAbc=0x100000;那么pAbc+0x100=Ox ;(ULONG)pAbc+Ox1OO=Ox ;(ULONG*)pAbc+0x100=0x ;(char*)pAbc+0x100=0x ;100C00 100100 100400 10010067、 unsignedlongFUNC_C(unsignedlongulAction){unsignedlongulResult=0;switch(ulAction){caseACTION_A:{ulResult+=1;break;}caseACTION_B:{ulResult+=1;}default:{ulResult+=1;}}printf("ulResult=%u",ulResult);returnulResult;}當(dāng)輸入為ACTION_B時,輸出結(jié)果為:ulResult= ;268、 下面的代碼中,函數(shù)Test執(zhí)行完畢后,打印的結(jié)果是 unsignedlongg_ulGlobal=0;voidGlobalInit(unsignedlongulArg){ulArg=0x01;return;}voidTest(){GlobalInit(g_ulGlobal);printf("%lu",g_ulGlobal);return;}069、 以下程序的輸出的結(jié)果是 intx=3;voidincre();voidmain(){inti;for(i=1;i<x;i++){incre();}return;voidincre(){staticintx=1;x*=(x+1);printf("%d",x);return;}2670、以下程序的輸出的結(jié)果是 #pragmapack(4)/*四字節(jié)對齊*/intmain(intargc,char*argv[]){unsignedcharpuc[4];structtagPIM{unsignedcharucPim1;unsignedcharucData0:1;unsignedcharucData1:2;unsignedcharucData2:3;}*pstPimData;pstPimData=(structtagPIM*)puc;memset(puc,0,4);pstPimData->ucPim1=1;pstPimData->ucData0=2;pstPimData->ucData1=3;pstPimData->ucData2=4;printf("%02X%02X%02X%02X\n",puc[0],puc[1],puc[2],puc[3]);return0;}#pragmapack()/*恢復(fù)缺省對齊方式*/0126000071、 enumNEW_SERV_ID{NSID_SERV_NULL=0,NSID_SERV254=254,NSID_SERV255,NSID_BUTT};unsignedcharGetNsid(charnsid){return(nsid);}GetNsid(NSID_SERV_NULL)= ;GetNsid(NSID_SERV255)= ;GetNsid(NSID_BUTT)=__.0,255,0三、指出下列程序中導(dǎo)致不能出現(xiàn)預(yù)期結(jié)果的唯一錯誤(不考慮編程規(guī)范錯誤)72、 下面程序把"hello"這個字符串輸出,請指出其中的錯誤。voidTest(void){charpcArray[10];strncpy(pcArray,"hello",5);printf("%s\n",pcArray);return;}strncpy沒有把中止符NULL寫入數(shù)組中73、 如下程序用于把"系統(tǒng)備板工作異常"字符串打印出來,請指出其中的錯誤:voidPrintErrInfo(void){characMsg[16];strcpy(acMsg,"系統(tǒng)備板工作異常");printf("%s",acMsg);return;}每個漢字占兩個字節(jié),空間不足,字符串結(jié)尾還有'\0'74、 如下函數(shù)實現(xiàn)打印字符串"helloworld"的功能,請指出錯誤:#defineBUFFER_SIZE256voidGetMemory(char*pszBuf){if(NULL==pszBuf){ASSERT(0);return;pszBuf=(char*)malloc(BUFFER_SIZE);return;}voidTest(void){char*pszBuf=NULL;GetMemory(pszBuf);if(NULL==pszBuf){return;}strcpy(pszBuf,"helloworld\r\n");printf("%s",pszBuf);free(pszBuf);return;}函數(shù)要返回指針就需要傳進去指針的地址75、 如下函數(shù)實現(xiàn)打印字符串"helloworld"的功能,請指出錯誤:char*GetMemory(void){charpcBuf[]="helloworld\r\n";returnpcBuf;}voidTest(void){char*pcStr=NULL;pcStr=GetMemory();if(NULL==pcStr){printf("Cannotgetstring!\r\n");return;}else{printf("%s",pcStr);}retur
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路護欄修建合同范本
- 個人用電協(xié)議合同范例
- 公司運輸購銷合同范本
- 刻字木材出售合同范本
- 個人旅游陪玩合同范本
- 個人住家保姆合同范本
- 勞務(wù)代理加盟合同范例
- fidic銀皮書合同范例
- 出售電廠燒火料合同范本
- fpc代加工合同范本
- 2008 年全國高校俄語專業(yè)四級水平測試試卷
- 需求供給與均衡價格PPT課件
- 金融工程鄭振龍課后習(xí)題答案
- 最常用2000個英語單詞_(全部標有注釋)字母排序
- 人造革的幾種生產(chǎn)制造方法
- 在銀行大零售業(yè)務(wù)工作會議上的講話講解學(xué)習(xí)
- 發(fā)電廠動力部分復(fù)習(xí)資料
- 古代傳說中的藝術(shù)形象-
- 水電站大壩土建安裝工程懸臂模板施工手冊
- 三體系內(nèi)審檢查表(共58頁).doc
- 家樂福 全套管控文件
評論
0/150
提交評論