轉(zhuǎn)載經(jīng)典CC面試題四_第1頁(yè)
轉(zhuǎn)載經(jīng)典CC面試題四_第2頁(yè)
轉(zhuǎn)載經(jīng)典CC面試題四_第3頁(yè)
轉(zhuǎn)載經(jīng)典CC面試題四_第4頁(yè)
轉(zhuǎn)載經(jīng)典CC面試題四_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.轉(zhuǎn)載 經(jīng)典C C 面試題 四原文地址:經(jīng)典C/C+面試題(四)作者:zcan1、局部變量能否和全局變量重名?能,局部會(huì)屏蔽全局。要用全局變量,需要使用":"局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量,而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)。2、如何引用一個(gè)已經(jīng)定義過(guò)的全局變量?extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫(xiě)錯(cuò)了,那

2、么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?可以,在不同的C文件中以static形式來(lái)聲明同名全局變量??梢栽诓煌腃文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)。4、語(yǔ)句for(;1;)有什么問(wèn)題?它是什么意思?無(wú)限循環(huán),和while(1)相同。5、dowhile和whiledo有什么區(qū)別?前一個(gè)循環(huán)一遍再判斷,后一個(gè)判斷以后再循環(huán)。6、請(qǐng)寫(xiě)出下列代碼的輸出內(nèi)容#include stdio.h main()int

3、a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf("b,c,d:%d,%d,%d",b,c,d);return 0;答:10,12,120 7、請(qǐng)找出下面代碼中的所以錯(cuò)誤說(shuō)明:以下代碼是把一個(gè)字符串倒序,如"abcd"倒序后變?yōu)?quot;dcba"#include"string.h"main()char*src="hello,world";char*dest=NULL;int len=strlen(src);dest=(char*)malloc(len);char*d=dest

4、;char*s=srclen;while(len-!=0)d+=s-;printf("%s",dest);return 0;答:方法1:int main()char*src="hello,world";int len=strlen(src);char*dest=(char*)malloc(len+1);/要為分配一個(gè)空間char*d=dest;char*s=&srclen-1;/指向最后一個(gè)字符while(len-!=0)*d+=*s-;*d=0;/尾部要加printf("%sn",dest);free(dest);/使用完,

5、應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露return 0;方法2:#include stdio.h#include string.h main()char str="hello,world";int len=strlen(str);char t;for(int i=0;i len/2;i+)t=stri;stri=strlen-i-1;strlen-i-1=t;printf("%s",str);return 0;8、-1,2,7,28,126請(qǐng)問(wèn)28和126中間那個(gè)數(shù)是什么?為什么?答案應(yīng)該是43-1=63規(guī)律是n3-1(當(dāng)n為偶數(shù)0,2,4)n3+1(當(dāng)n為奇

6、數(shù)1,3,5)答案:63 9、用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!設(shè)2個(gè)棧為A,B,一開(kāi)始均為空.入隊(duì):將新元素push入棧A;出隊(duì):(1)判斷棧B是否為空;(2)如果不為空,則將棧A中所有元素依次pop出并push到棧B;(3)將棧B的棧頂元素pop出;這樣實(shí)現(xiàn)的隊(duì)列入隊(duì)和出隊(duì)的平攤復(fù)雜度都還是O(1),比上面的幾種方法要好。10、在c語(yǔ)言庫(kù)函數(shù)中將一個(gè)字符轉(zhuǎn)換成整型的函數(shù)是atool()嗎,這個(gè)函數(shù)的原型是什么?函數(shù)名:atol功能:把字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)用法:long atol(const char*nptr);程序例:#include stdlib.h#include st

7、dio.h int main(void)long l;char*str="98765432";l=atol(lstr);printf("string=%s integer=%ldn",str,l);return(0);11、對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語(yǔ)言中應(yīng)用什么實(shí)現(xiàn),在C+中應(yīng)用什么實(shí)現(xiàn)?c用宏定義,c+用inline 12、直接鏈接兩個(gè)信令點(diǎn)的一組鏈路稱(chēng)作什么?PPP點(diǎn)到點(diǎn)連接13、接入網(wǎng)用的是什么接口?14、voip都用了那些協(xié)議?15、軟件測(cè)試都有那些種類(lèi)?黑盒:針對(duì)系統(tǒng)功能的測(cè)試白合:測(cè)試函數(shù)功能,各函數(shù)接口16、確定模塊的功能和模塊的接

8、口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的?概要設(shè)計(jì)階段17、enum stringx1,x2,x3=10,x4,x5,x;問(wèn)x=0x 801005,0x8010f4;18、unsigned char*p1;unsigned long*p2;p1=(unsigned char*)0x 801000;p2=(unsigned long*)0x 810000;請(qǐng)問(wèn)p1+5=0x 801005;p2+5=0x 801014;19.多態(tài)的作用?主要是兩個(gè):1.隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼能夠模塊化;擴(kuò)展代碼模塊,實(shí)現(xiàn)代碼重用;2.接口重用:為了類(lèi)在繼承和派生的時(shí)候,保證使用家族中任一類(lèi)的實(shí)例的某一屬性時(shí)的正確調(diào)用。20

9、.Ado與A的相同與不同?除了"能夠讓?xiě)?yīng)用程序處理存儲(chǔ)于DBMS中的數(shù)據(jù)"這一基本相似點(diǎn)外,兩者沒(méi)有太多共同之處。但是Ado使用OLE DB接口并基于微軟的COM技術(shù),而ADO.NET擁有自己的ADO.NET接口并且基于微軟的.NET體系架構(gòu)。眾所周知.NET體系不同于COM體系,ADO.NET接口也就完全不同于ADO和OLE DB接口,這也就是說(shuō)ADO.NET和ADO是兩種數(shù)據(jù)訪問(wèn)方式。ADO.net提供對(duì)XML的支持。21.New delete與malloc free的聯(lián)系與區(qū)別?都是在堆(heap)上進(jìn)行動(dòng)態(tài)的內(nèi)存操作。用malloc函數(shù)需要指定內(nèi)存分配的字節(jié)數(shù)并且不

10、能初始化對(duì)象,new會(huì)自動(dòng)調(diào)用對(duì)象的構(gòu)造函數(shù)。delete會(huì)調(diào)用對(duì)象的destructor,而free不會(huì)調(diào)用對(duì)象的destructor.22.#define DOUBLE(x)x+x,i=5*DOUBLE(5);i是多少?答案:i為30。23.有哪幾種情況只能用intialization list而不能用assignment?答案:當(dāng)類(lèi)中含有const、reference成員變量;基類(lèi)的構(gòu)造函數(shù)都需要初始化表。24.C+是不是類(lèi)型安全的?答案:不是。兩個(gè)不同類(lèi)型的指針之間可以強(qiáng)制轉(zhuǎn)換(用reinterpret cast)。C#是類(lèi)型安全的。25.main函數(shù)執(zhí)行以前,還會(huì)執(zhí)行什么代碼?答案:

11、全局對(duì)象的構(gòu)造函數(shù)會(huì)在main函數(shù)之前執(zhí)行。26.描述內(nèi)存分配方式以及它們的區(qū)別?1)從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量,static變量。2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。3)從堆上分配,亦稱(chēng)動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問(wèn)題也最多。27.struct和class的區(qū)別str

12、uct的成員默認(rèn)是公有的,而類(lèi)的成員默認(rèn)是私有的。struct和class在其他方面是功能相當(dāng)?shù)摹母星樯现v,大多數(shù)的開(kāi)發(fā)者感到類(lèi)和結(jié)構(gòu)有很大的差別。感覺(jué)上結(jié)構(gòu)僅僅象一堆缺乏封裝和功能的開(kāi)放的內(nèi)存位,而類(lèi)就象活的并且可靠的社會(huì)成員,它有智能服務(wù),有牢固的封裝屏障和一個(gè)良好定義的接口。既然大多數(shù)人都這么認(rèn)為,那么只有在你的類(lèi)有很少的方法并且有公有數(shù)據(jù)(這種事情在良好設(shè)計(jì)的系統(tǒng)中是存在的!)時(shí),你也許應(yīng)該使用struct關(guān)鍵字,否則,你應(yīng)該使用class關(guān)鍵字。28.當(dāng)一個(gè)類(lèi)A中沒(méi)有生命任何成員變量與成員函數(shù),這時(shí)sizeof(A)的值是多少,如果不是零,請(qǐng)解釋一下編譯器為什么沒(méi)有讓它為零。(Au

13、todesk)肯定不是零。舉個(gè)反例,如果是零的話,聲明一個(gè)class A10對(duì)象數(shù)組,而每一個(gè)對(duì)象占用的空間是零,這時(shí)就沒(méi)辦法區(qū)分A0,A1了。29.在8086匯編下,邏輯地址和物理地址是怎樣轉(zhuǎn)換的?(Intel)通用寄存器給出的地址,是段內(nèi)偏移地址,相應(yīng)段寄存器地址*10H+通用寄存器內(nèi)地址,就得到了真正要訪問(wèn)的地址。30.比較C+中的4種類(lèi)型轉(zhuǎn)換方式?請(qǐng)參考:,重點(diǎn)是static_cast,dynamic_cast和reinterpret_cast的區(qū)別和應(yīng)用。31.分別寫(xiě)出BOOL,int,float,指針類(lèi)型的變量a與"零"的比較語(yǔ)句。答案:BOOL:if(!a)o

14、r if(a)int:if(a=0)float:const EXPRESSION EXP=0.000001 if(a EXP&&a-EXP)pointer:if(a!=NULL)or if(a=NULL)32.請(qǐng)說(shuō)出const與#define相比,有何優(yōu)點(diǎn)?答案:1)const常量有數(shù)據(jù)類(lèi)型,而宏常量沒(méi)有數(shù)據(jù)類(lèi)型。編譯器可以對(duì)前者進(jìn)行類(lèi)型安全檢查。而對(duì)后者只進(jìn)行字符替換,沒(méi)有類(lèi)型安全檢查,并且在字符替換可能會(huì)產(chǎn)生意料不到的錯(cuò)誤。2)有些集成化的調(diào)試工具可以對(duì)const常量進(jìn)行調(diào)試,但是不能對(duì)宏常量進(jìn)行調(diào)試。33.簡(jiǎn)述數(shù)組與指針的區(qū)別?數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要

15、么在棧上被創(chuàng)建。指針可以隨時(shí)指向任意類(lèi)型的內(nèi)存塊。(1)修改內(nèi)容上的差別char a="hello";a0='X';char*p="world";/注意p指向常量字符串p0='X';/編譯器不能發(fā)現(xiàn)該錯(cuò)誤,運(yùn)行時(shí)錯(cuò)誤(2)用運(yùn)算符sizeof可以計(jì)算出數(shù)組的容量(字節(jié)數(shù))。sizeof(p),p為指針得到的是一個(gè)指針變量的字節(jié)數(shù),而不是p所指的內(nèi)存容量。C+/C語(yǔ)言沒(méi)有辦法知道指針?biāo)傅膬?nèi)存容量,除非在申請(qǐng)內(nèi)存時(shí)記住它。注意當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類(lèi)型的指針。char a="hello

16、world";char*p=a;cout sizeof(a)endl;/12字節(jié)cout sizeof(p)endl;/4字節(jié)計(jì)算數(shù)組和指針的內(nèi)存容量void Func(char a100)cout sizeof(a)endl;/4字節(jié)而不是100字節(jié)34.類(lèi)成員函數(shù)的重載、覆蓋和隱藏區(qū)別?答案:a.成員函數(shù)被重載的特征:(1)相同的范圍(在同一個(gè)類(lèi)中);(2)函數(shù)名字相同;(3)參數(shù)不同;(4)virtual關(guān)鍵字可有可無(wú)。b.覆蓋是指派生類(lèi)函數(shù)覆蓋基類(lèi)函數(shù),特征是:(1)不同的范圍(分別位于派生類(lèi)與基類(lèi));(2)函數(shù)名字相同;(3)參數(shù)相同;(4)基類(lèi)函數(shù)必須有virtual關(guān)鍵

17、字。c."隱藏"是指派生類(lèi)的函數(shù)屏蔽了與其同名的基類(lèi)函數(shù),規(guī)則如下:(1)如果派生類(lèi)的函數(shù)與基類(lèi)的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無(wú)virtual關(guān)鍵字,基類(lèi)的函數(shù)將被隱藏(注意別與重載混淆)。(2)如果派生類(lèi)的函數(shù)與基類(lèi)的函數(shù)同名,并且參數(shù)也相同,但是基類(lèi)函數(shù)沒(méi)有virtual關(guān)鍵字。此時(shí),基類(lèi)的函數(shù)被隱藏(注意別與覆蓋混淆)35.There are two int variables:a and b,don't use"if","?:","switch"or other judgement stat

18、ements,find out the biggest one of the two numbers.答案:(a+b)+abs(a-b)/2 36.如何打印出當(dāng)前源文件的文件名以及源文件的當(dāng)前行號(hào)?答案:cout _FILE_;cout _LINE_;_FILE_和_LINE_是系統(tǒng)預(yù)定義宏,這種宏并不是在某個(gè)文件中定義的,而是由編譯器定義的。37.main主函數(shù)執(zhí)行完畢后,是否可能會(huì)再執(zhí)行一段代碼,給出說(shuō)明?答案:可以,可以用_onexit注冊(cè)一個(gè)函數(shù),它會(huì)在main之后執(zhí)行int fn1(void),fn2(void),fn3(void),fn4(void);void main(void)

19、String str("zhanglin");_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);printf("This is executed first.n");int fn1()printf("next.n");return 0;int fn2()printf("executed");return 0;int fn3()printf("is");return 0;int fn4()printf("This");ret

20、urn 0;The _onexit function is passed the address of afunction(func)to be called when the program terminates normally.Successive calls to _onexit create aregister of functions that are executed in LIFO(last-in-first-out)order.The functions passed to _onexit cannot take parameters.38.如何判斷一段程序是由C編譯程序還是

21、由C+編譯程序編譯的?答案:#ifdef _cplusplus cout"c+";#else cout"c";#endif 39.文件中有一組整數(shù),要求排序后輸出到另一個(gè)文件中答案:#include iostream#include fstream using namespace std;void Order(vector int&data)/bubble sortint count=data.size();int tag=false;/設(shè)置是否需要繼續(xù)冒泡的標(biāo)志位for(int i=0;i count;i+)for(int j=0;j coun

22、t-i-1;j+)if(datajdataj+1)tag=true;int temp=dataj;dataj=dataj+1;dataj+1=temp;if(!tag)break;void main(void)vector int data;ifstream in("c:data.txt");if(!in)cout"file error!";exit(1);int temp;while(!in.eof()in temp;data.push_back(temp);in.close();/關(guān)閉輸入文件流Order(data);ofstream out(&qu

23、ot;c:result.txt");if(!out)cout"file error!";exit(1);for(i=0;i data.size();i+)out data"";out.close();/關(guān)閉輸出文件流40.鏈表題:一個(gè)鏈表的結(jié)點(diǎn)結(jié)構(gòu)struct Nodeint data;Node*next;typedef struct Node Node;(1)已知鏈表的頭結(jié)點(diǎn)head,寫(xiě)一個(gè)函數(shù)把這個(gè)鏈表逆序(Intel)Node*ReverseList(Node*head)/鏈表逆序if(head=NULL|head-next=NULL)r

24、eturn head;Node*p1=head;Node*p2=p1-next;Node*p3=p2-next;p1-next=NULL;while(p3!=NULL)p2-next=p1;p1=p2;p2=p3;p3=p3-next;p2-next=p1;head=p2;return head;(2)已知兩個(gè)鏈表head1和head2各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序。(保留所有結(jié)點(diǎn),即便大小相同)Node*Merge(Node*head1,Node*head2)if(head1=NULL)return head2;if(head2=NULL)return head1;Node*hea

25、d=NULL;Node*p1=NULL;Node*p2=NULL;if(head1-data head2-data)head=head1;p1=head1-next;p2=head2;elsehead=head2;p2=head2-next;p1=head1;Node*pcurrent=head;while(p1!=NULL&&p2!=NULL)if(p1-data=p2-data)pcurrent-next=p1;pcurrent=p1;p1=p1-next;elsepcurrent-next=p2;pcurrent=p2;p2=p2-next;if(p1!=NULL)pcu

26、rrent-next=p1;if(p2!=NULL)pcurrent-next=p2;return head;(3)已知兩個(gè)鏈表head1和head2各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序,這次要求用遞歸方法進(jìn)行。(Autodesk)答案:Node*MergeRecursive(Node*head1,Node*head2)if(head1=NULL)return head2;if(head2=NULL)return head1;Node*head=NULL;if(head1-data head2-data)head=head1;head-next=MergeRecursive(head1-n

27、ext,head2);elsehead=head2;head-next=MergeRecursive(head1,head2-next);return head;41.分析一下這段程序的輸出(Autodesk)class Bpublic:B()cout"default constructor"endl;B()cout"destructed"endl;B(int i):data(i)/B(int)works as aconverter(int-instance of B)cout"constructed by parameter"dat

28、a endl;private:int data;B Play(B b)return b;(1)results:int main(int argc,char*argv)constructed by parameter 5destructed B(5)形參析構(gòu)B t1=Play(5);B t2=Play(t1);destructed t1形參析構(gòu)return 0;destructed t2注意順序!destructed t1(2)results:int main(int argc,char*argv)constructed by parameter 5destructed B(5)形參析構(gòu)B t1=Play(5);B t2=Play(10);constructed by parameter 10 return 0;destructed B(10)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論