版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面试准备题(包括高质量c+题)const char*, char const*, char*const的区别问题几乎是C+面试中每次都会有的题目。事实上这个个概念谁谁都有只只是三种种声明方方式非常常相似很很容易记记混。 Bjarnne在他他的Thhe CC+ Proograammiing Lannguaage里里面给出出过一个个助记的的方法: 把一个声明明从右向向左读。char * cconsst ccp; ( * 读成成 poointter to ) cp iss a connst poiinteer tto ccharrconstt chhar * pp; p is a ppoinnter
2、r too coonstt chhar;char connst * pp; 同上因为CC+里里面没有有connst*的运算算符,所所以coonstt只能属属于前面面的类型型。 下面这个程程序执行行后会有有什么错错误或者者效果:#defiine MAXX 2555int mmainn() unnsiggnedd chhar AMMAX,i; foor (i=00;i=MAAX;ii+) Ai=i;解答:MAX=2255数组A的下下标范围围为:00.MMAX-1,这这是其一一.其二.当ii循环到到2555时,循循环内执执行:A2555=2255;这句本身没没有问题题.但但是返回回forr (ii=
3、0;i=MAXX;i+)语语句时,由于unssignned chaar的取取值范围围在(00.2255),i+以后后i又为为0了.无限限循环下下去.注:chaar类型型为一个个字节,取取值范围围是-1288,1227,uunsiigneed ccharr 00 ,2255编写用C语语言实现现的求nn阶阶乘乘问题的的递归算算法:long intt faact(intt n)int xx;long intt y;if(nhhighh) rretuurn -1;mid=(loww+hiigh)/2;if(x=amidd) retturnn miid;if(xammid) rretuurn(BSeea
4、rcch(aa,x,loww,miid-11);else retturnn(BSSearrch(a,xx,miid+11,hiigh);2、非递归归方法实实现:int BBSeaarchh(ellemttypee a,kkeyttypee keey,iint n)int llow,higgh,mmid;low=00;hiigh=n-11;whilee(loow=higgh) miid=(loww+hiigh)/2; iff(amidd.kkey=keey) retturnn miid; ellse if(ammid.keey2解:int ff(innt nn)int ii,s,s1,s2;s1
5、=1;/*ss1用于于保存ff(n-1)的的值*/s2=1;/*ss2用于于保存ff(n-2)的的值*/s=1;for(ii=3;i= - EPPSINNON) & (xx =”或“=”此类形式。如下是错误误的写法法,不得得分。if (xx = 0.0)if (xx != 0.0)请写出 ccharr *pp 与“零值”比较的的 iff 语句句。(33 分)标准答案:if (pp = NUULL)if (pp != NUULL)如下写法均均属不良良风格,不不得分。if (pp = 0)if (pp != 0)if (pp)if (!)二、以下为为Winndowws NNT 下下的322 位CC
6、+程程序,请请计算ssizeeof 的值(110 分分)void Funnc ( chhar strr1000)请计算sizeoof( strr ) = 44 (22 分)char strr = “HHelllo” ;char *p = sstr ;int nn = 10;请计算sizeoof (strr ) = 66 (22 分)sizeoof ( p ) = 4 (2 分)sizeoof ( n ) = 4 (2 分)void *p = mmallloc( 1000 );请计算sizeoof ( p ) = 4 (2 分)三、简答题题(255 分)1、头文件件中的 ifnndeff/dee
7、finne/eendiif 干干什么用用?(55 分)答:防止该该头文件件被重复复引用。2、#inncluude 和 #inncluude “fillenaame.h” 有什什么区别别?(55 分)答:对于#inccludde ,编译译器从标标准库路路径开始始搜索 fillenaame.h对于#inncluude “fillenaame.h” ,编编译器从从用户的的工作路路径开始始搜索 fillenaame.h3、connst 有什么么用途?(请至至少说明明两种)(55 分)答:(1)可可以定义义 coonstt 常量量(2)coonstt 可以以修饰函函数的参参数、返返回值,甚甚至函数数的定
8、义义体。被被connst 修饰的的东西都受到强强制保护护,可以以预防意意外的变变动,能能提高程程序的健健壮性。4、在C+ 程程序中调调用被 C 编编译器编编译后的的函数,为为什么要要加 eexteern “C”? (55 分)答:C+语言支支持函数数重载,CC 语言言不支持持函数重重载。函函数被CC+编编译后在在库中的的名字与C 语言言的不同同。假设设某个函函数的原原型为: vooid fooo(innt xx, iint y);该函数被CC 编译译器编译译后在库库中的名名字为_fooo , 而C+编译译器则会会产生像像_foo_intt_innt 之之类的名名字。C+提供供了C 连接交交换指
9、定定符号eexteern“C”来解决决名字匹匹配问题题。5、请简述述以下两两个foor 循循环的优优缺点(55 分)for (i=00; iiN; i+)if (ccondditiion)DoSommethhingg();elseDoOthhertthinng();if (ccondditiion)for (i=00; iiN; i+)DoSommethhingg();elsefor (i=00; iiN; i+)DoOthhertthinng();优点:程序序简洁缺点:多执执行了NN-1 次逻辑辑判断,并并且打断了循环环“流水线线”作业,使使得编译译器不能对循循环进行行优化处处理,降降低了效
10、效率。优点:循环环的效率率高缺点:程序序不简洁洁四、有关内内存的思思考题(每每小题55 分,共共20 分)void GettMemmoryy(chhar *p)p = (chaar *)maallooc(1100);void Tesst(vvoidd)char *sttr = NUULL;GetMeemorry(sstr);strcppy(sstr, hhelllo wworlld);printtf(sstr);请问运行TTestt 函数数会有什什么样的的结果?答:程序崩崩溃。因为GettMemmoryy 并不不能传递递动态内内存,Test 函数中中的 sstr 一直都都是 NNULLL。st
11、rcppy(sstr, hhelllo wworlld);将使使程序崩崩溃。char *GeetMeemorry(vvoidd)char p = heelloo woorldd;returrn pp;void Tesst(vvoidd)char *sttr = NUULL;str = GeetMeemorry();printtf(sstr);请问运行TTestt 函数数会有什什么样的的结果?答:可能是是乱码。因为GettMemmoryy 返回回的是指指向“栈内存存”的指针,该该指针的的地址不不是 NNULLL,但其其原现的内容已已经被清清除,新新内容不不可知。void GettMemmoryy
12、2(ccharr *p, intt nuum)*p = (chhar *)mmallloc(numm);void Tesst(vvoidd)char *sttr = NUULL;GetMeemorry(&strr, 1100);strcppy(sstr, hhelllo);printtf(sstr);请问运行TTestt 函数数会有什什么样的的结果?答:(1)能够够输出hhelllo(2)内存存泄漏void Tesst(vvoidd)char *sttr = (ccharr *) maallooc(1100);strcppy(sstr, “hhelllo”);free(strr);if(stt
13、r != NNULLL)strcppy(sstr, “wworlld”);printtf(sstr);请问运行TTestt 函数数会有什什么样的的结果?答:篡改动动态内存存区的内内容,后后果难以以预料,非常危危险。因为freee(sstr);之后后,sttr 成成为野指指针,if(sttr != NNULLL)语句句不起作作用。五、编写sstrccpy 函数(110 分分)已知strrcpyy 函数数的原型型是char *sttrcppy(ccharr *sstrDDestt, cconsst ccharr *sstrSSrc);其中strrDesst 是是目的字字符串,sstrSSrc 是源
14、字字符串。(1)不调调用C+/CC 的字字符串库库函数,请请编写函函数 sstrccpychar *sttrcppy(ccharr *sstrDDestt, cconsst ccharr *sstrSSrc);asserrt(strrDesst!=NULLL) & (sttrSrrc !=NUULL); / 2分char *adddreess = sstrDDestt; / 22分whilee( (*sttrDeest+ = * strrSrcc+) != 0 ) / 2分NULL ;returrn aaddrresss ; / 2分(2)sttrcppy 能能把sttrSrrc 的的内容复复
15、制到sstrDDestt,为什什么还要要chaar * 类型型的返回回值?答:为了实实现链式式表达式式。 / 22 分例如 innt llenggth = sstrllen( sttrcppy( strrDesst, “helllo worrld”) );六、编写类类Strringg 的构构造函数数、析构构函数和和赋值函函数(225 分分)已知类Sttrinng 的的原型为为:classs Sttrinngpubliic:Strinng(cconsst ccharr *sstr = NNULLL); / 普通构构造函数数Strinng(cconsst SStriing &ottherr); /
16、 拷贝构构造函数数 Strringg(vooid); / 析析构函数数Strinng & opperaate =(cconsst SStriing &ottherr); / 赋值函函数privaate:char *m_datta; / 用于保保存字符符串;请编写Sttrinng 的的上述44 个函函数。标准答案:/ Sttrinng 的的析构函函数Strinng:Sttrinng(vvoidd) / 33 分delette mm_daata;/ 由于于m_ddataa 是内内部数据据类型,也也可以写写成 ddeleete m_ddataa;/ Sttrinng 的的普通构构造函数数Strinn
17、g:Strringg(coonstt chhar *sttr) / 6 分分if(sttr=NULLL)m_datta = neew ccharr1; / 若若能加 NULLL 判判断则更更好*m_daata = 0;elseint llenggth = sstrllen(strr);m_datta = neew ccharrleengtth+11; / 若能加加 NUULL 判断则则更好strcppy(mm_daata, sttr);/ 拷贝贝构造函函数Strinng:Strringg(coonstt Sttrinng &othher) / 3 分int llenggth = sstrlle
18、n(othher.m_ddataa);m_datta = neew ccharrleengtth+11; / 若能加加 NUULL 判断则则更好strcppy(mm_daata, ottherr.m_datta);/ 赋值值函数Strinng & Sttrinng:opeeratte =(coonstt Sttrinng &othher) / 133 分/ (11) 检检查自赋赋值 / 44 分if(thhis = &ottherr)returrn *thiis;/ (22) 释释放原有有的内存存资源 / 3 分分delette mm_daata;/ (33)分配配新的内内存资源源,并复复制内
19、容容 / 3 分int llenggth = sstrllen(othher.m_ddataa);m_datta = neew ccharrleengtth+11; / 若能加加 NUULL 判断则则更好strcppy(mm_daata, ottherr.m_datta);/ (44)返回回本对象象的引用用 / 3 分returrn *thiis;winsoockeet编程程#inclludee #inclludee void maiin()WORDwwVerrsioonReequeesteed;WSADAATA wsaaDatta;int eerr; wVerssionnReqquesste
20、dd = MAKKEWOORD(1,11);err = WSSASttarttup(wVeersiionRRequuestted,&wssaDaata);if( eerr != 0) reeturrn; if(LOOBYTTE( wsaaDatta.wwVerrsioon ) != 1| HIBBYTEE( wwsaDDataa.wVVerssionn) != 11) WSAACleeanuup(); retturnn;SOCKEET ssockkSrvv=soockeet(AAF_IINETT,SOOCK_STRREAMM,0);SOCKAADDRR_INN adddrSSrv;addrSS
21、rv.sinn_adddr.S_uun.SS_adddr=htoonl(INAADDRR_ANNY);addrSSrv.sinn_faamilly=AAF_IINETT;addrSSrv.sinn_poort=htoons(60000);bind(socckSrrv,(SOCCKADDDR*)&aaddrrSrvv,siizeoof(SSOCKKADDDR);listeen(ssockkSrvv,5);SOCKAADDRR_INN adddrCClieent;int llen=sizzeoff(SOOCKAADDRR);whilee(1) SOCCKETT soockCConnn=acccep
22、pt(ssockkSrvv,(SSOCKKADDDR*)&adddrCClieent,&leen); chaar ssenddBuff1000; sprrintt(seendBBuf,Weelcoome %s to htttp:/wwww.995waangmmingg.coom, ineet_nntoaa(adddrCClieent.sinn_adddr); sennd(ssockkConnn,ssenddBuff,sttrleen(ssenddBuff)+11,0); chaar rrecvvBuff1000; reccv(ssockkConnn,rrecvvBuff); priintff(
23、%snn,rrecvvBuff); cloosessockket(socckCoonn); WSAACleeanuup(); 注:这是SServver端端;Fiile-Neew-Winn32 Connsolle AAppllicaatioon,工工程名:TcppSrvv;然后后,Fiile-Neew-C+ Soourcce FFilee,文件件名:TTcpSSrv;在该工工程的SSetttingg的Liink的的Objjectt/liibraary moddulees项要要加入wws2_32.libb#inclludee #inclludee void maiin()WORDwwVerrsio
24、onReequeesteed;WSADAATA wsaaDatta;int eerr; wVerssionnReqquesstedd = MAKKEWOORD(1,11);err = WSSASttarttup(wVeersiionRRequuestted,&wssaDaata);if( eerr != 0) reeturrn; if(LOOBYTTE( wsaaDatta.wwVerrsioon ) != 1| HIBBYTEE( wwsaDDataa.wVVerssionn) != 11) WSAACleeanuup(); retturnn;SOCKEET ssockkCliientt=s
25、oockeet(AAF_IINETT,SOOCK_STRREAMM,0);SOCKAADDRR_INN adddrSSrv;addrSSrv.sinn_adddr.S_uun.SS_adddr=ineet_aaddrr(1127.0.00.1); addrSSrv.sinn_faamilly=AAF_IINETT;addrSSrv.sinn_poorthhtonns(660000);conneect(socckClliennt,(SOCCKADDDR*)&aaddrrSrvv,siizeoof(SSOCKKADDDR);char reccvBuuf1100;recv(socckClliennt
26、,rrecvvBuff,1000,00);printtf(%sn,reccvBuuf);send(socckClliennt,Thiis iis zzhanngsaan,strrlenn(TThiss iss zhhanggsann)+1,00); closeesocckett(soockCClieent);WSAClleannup();注:这是CClieent端端;Fiile-Neew-Winn32 Connsolle AAppllicaatioon,工工程名:TcppCliientt;然后后,Fiile-Neew-C+ Soourcce FFilee,文件件名:TTcpCClieent;同
27、理,在在该工程程的Seettiing的的Linnk的OObjeect/libbrarry mmoduuless项要加加入wss2_332.llibC#inclludee classs huumannpubliic:humann() huumann_nuum+;statiic iint humman_numm;humaan()humann_nuum-;printt();void priint()couthhumaan nnum is: huumann_nuumenddl;proteecteed:privaate:;int hhumaan:humman_numm = 0;humann f11(hu
28、umann x)x.priint();returrn xx;int mmainn(innt aargcc, ccharr* aargvv)humann h11;h1.prrintt();humann h22 = f1(h1);h2.prrintt();returrn 00;输出:110012分析:humann h11; /调用用构造函函数,-hhum_numm = 1;h1.prrintt(); /输出出:hhumaan iis 11humann h22 = f1(h1); /再调用用f1(h1)的过程程中,由由于函数数参数是是按值传传递对象象,调用用默认的的复制构构造函数数,它并并没有对对h
29、umm_nuum+,所以以humm_nuum 仍仍= 11,所以以x.pprinnt()输出:huumann iss 1; 在推推出f11函数时时,要销销毁X,调用析析构函数数(huumann_nuum-),输输出:humman is 0(,由于于该函数数返回一一个huumann 对象象,所以以又调用用默认构构造函数数,创建建一个临临时对象象(huumann_nuum = 0;),把把临时对对象赋给给h2,又调用用默认构构造函数数( hhumaan_nnum = 00); h2.prrintt(); /输输出: humman is 0;/在退出出maiin()函数是是,先销销毁h22,调用用析
30、构函函数(hhumaan_nnum-),输出 huumann_nuum iis -1然后销毁hh1,调调用析构构函数(-),输出出huumann_nuum iis -2冒泡排序:void BubbbleeSorrt(eelemmtyppe xx,intt n)int ii,j;elemttypee teemp;for(ii=1;inn;i+) foor(jj=0;jxjj+1.keey) temmp=xxj; xjj=xxj+1; xjj+1=teemp; c语言 文文件读写写#inclludee sstdiio.hhmain()FILE *fpp;char ch,fillenaame10;s
31、canff(%s,fillenaame);if(ffp=ffopeen(ffileenamme,w)=NNULLL) pprinntf(caannt oopenn fiilen); eexitt(0);ch=geetchhar();whilee(chh!=#) ffputtc(cch,ffp); pputccharr(chh); cch=ggetccharr();fclosse(ffp);c指针int *pnn;-指针针数组,每每个元素素均为指指向整型型数据的的指针。int (*)ppn;-p为为指向一一维数组组的指针针,这个个一维数数组有nn个整型型数据。int *p();-函函数带回回指针
32、,指指针指向向返回的的值。int (*)pp();-p为指指向函数数的指针针。Windoows的的消息机机制1Windoows是是一个消消息(MMesssagee)驱动动系统。WWinddowss的消息息提供了了应用程程序之间间、应用用程序与与Winndowws系统统之间进进行通信信的手段段。应用用程序想想要实现现的功能能由消息息来触发发,并且且靠对消消息的响响应和处处理来完完成。 Winndowws系统统中有两两种消息息队列:系统消消息队列列和应用用程序消消息队列列。计算算机的所所有输入入设备由由Winndowws监控控。当一一个事件件发生时时,Wiindoows先先将输入入的消息息放入系系
33、统消息息队列中中,再将将消息拷拷贝到相相应的应应用程序序消息队队列中。应应用程序序的消息息处理程程序将反反复检测测消息队队列,并并把检测测到的每每个消息息发送到到相应的的窗口函函数中。这这便是一一个事件件从发生生至到达达窗口函函数必须须经历的的过程。 必须注注意的是是,消息息并非是是抢占性性的,无无论事件件的缓急急,总是是按照到到达的先先后派对对,依次次处理(一一些系统统消息除除外),这这样可能能使一些些实时外外部事件件得不到到及时处处理。Windoows的的消息机机制2Windoows中中的消息息是放在在对应的的进程的的消息队队列里的的。可以以通过GGetMMesssagee取得,并并且对于
34、于一般的的消息,此此函数返返回非零零值,但但是对于于WM_QUIIT消息息,返回回零。可可以通过过这个特特征,结结束程序序。当取取得消息息之后,应应该先转转换消息息,再分分发消息息。所谓谓转换,就就是把键键盘码的的转换,所所谓分发发,就是是把消息息分发给给对应的的窗口,由由对应的的窗口处处理消息息,这样样对应窗窗体的消消息处理理函数就就会被调调用。两两个函数数可以实实现这两两个功能能:TrransslatteMeessaage和和DisspattchMMesssagee。另外,需要要注意,当当我们点点击窗口口的关闭闭按钮关关闭窗口口时,程程序并没没有自动动退出,而而是向程程序发送送了一个个WM
35、_DESSTROOY消息息(其实实过程是是这样的的,首先先向程序序发送WWM_CCLOSSE消息息,默认认的处理理程序是是调用DDesttroyyWinndoww销毁窗窗体,从从而引发发WM_DESSTROOY消息息),此此时在窗窗体中我我们要响响应这个个消息,如如果需要要退出程程序,那那么就要要向程序序发送WWM_QQUITT消息(通过PPosttQuiitMeessaage实实现)。一个窗体如如果想要要调用自自己的消消息处理理函数,可可以使用用SenndMeessaage向向自己发发消息。如上所述,大大部分(注注意是大大部分)的的消息是是这样传传递的:首先放放到进程程的消息息队列中中,之后
36、后由GeetMeessaage取取出,转转换后,分分发给对对应的窗窗口。这这种消息息成为存存储式消消息。存存储式消消息基本本上是使使用者输输入的结结果,以以击键(如如WM_KEYYDOWWN和WWM_KKEYUUP讯息息)、击击键产生生的字符符(WMM_CHHAR)、鼠鼠标移动动(WMM_MOOUSEEMOVVE)和和鼠标按按钮(WWM_LLBUTTTONNDOWWN)的的形式给给出。存存储式消消息还包包含时钟钟消息(WWM_TTIMEER)、更更新消息息(WMM_PAAINTT)和退退出消息息(WMM_QUUIT)。但是也有的的消息是是直接发发送给窗窗口的,它它们被称称为非存存储式消消息。例
37、例如,当当WinnMaiin调用用CreeateeWinndoww时,WWinddowss将建立立窗口并并在处理理中给窗窗口消息息处理函函数发送送一个WWM_CCREAATE消消息。当当WinnMaiin调用用ShoowWiindoow时,WWinddowss将给窗窗口消息息处理函函数发送送WM_SIZZE和WWM_SSHOWWWINNDOWW消息。当当WinnMaiin调用用UpddateeWinndoww时,WWinddowss将给窗窗口消息息处理函函数发送送WM_PAIINT消消息。Windoows的的消息机机制3C+:mmemsset ,meemcppy 和和strrcpyy 的根根本区别别? #inclludee mmemoory.hmemseet用来来对一段段内存空空间全部部设置为为某个字字符,一一般用在在对定义义的字符符串进行行初始化化为 或或0;例:chaar aa1000;memmsett(a, 0, siizeoof(aa); memcppy用来来做内存存拷贝,你你可以拿拿它拷贝贝任何数数据类型型的对象象,可以以指定拷拷贝的数数据长度度;例:chaar aa1000,b550; meemcppy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国生鲜电商行业发展策略分析及投资模式研究报告
- 2024-2030年中国煤粉筛项目可行性研究报告
- 2024-2030年中国热镀锌锅融资商业计划书
- 2024-2030年中国烟草物流市场规模需求预测及投资运营动向分析报告
- 2024年多谱勒天气雷达项目立项申请报告范文
- 2024-2030年中国汽车维修设备行业规模现状与发展前景预测报告
- 2024年智能自动化装备项目立项申请报告
- 2024-2030年中国污水源热泵行业供需趋势及发展规划分析报告
- 2024-2030年中国水箱精行业发展状况规划分析报告
- 2024年异戊橡项目提案报告
- 《语言学纲要》修订版课后练习题
- 甲状腺癌术后并发症护理
- 2022年《江苏省机动车维修费用结算清单》格式
- 数字媒体技术专业群建设方案
- 机械毕业设计(PLC的恒温箱控制系统设计)
- 简述火力发电厂生产过程课件
- 砷环境地球化学研究进展
- 06竣工财务决算审计工作底稿(试行)
- 化验室化学试剂分类清单(参考模板)
- 三教”统一、和谐发展促进学生健康成长的有效方式
- 材料成型概论 第四章 挤压成型
评论
0/150
提交评论