版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
IT面試筆試題全集—史上最全_C++篇_Rain系列
南京TQ公司面試題
工、簡單描述包和dll異同
答:DLL(動態(tài)鏈接庫)是經(jīng)過編譯的代碼模塊,它和可執(zhí)行文件共同工作,為應(yīng)
用程序提供功能。程序包是用于C++Builder應(yīng)用程序、IDE或是二者同時(shí)使用的
特殊DLL。有兩種程序包:運(yùn)行時(shí)程序包和設(shè)計(jì)時(shí)程序包。運(yùn)行時(shí)程序包提供程
序執(zhí)行時(shí)的功能,設(shè)計(jì)時(shí)程序包擴(kuò)展了IDE的功能。
何時(shí)使用程序包和DLL
對于大多數(shù)C++Builder應(yīng)用程序,程序包提供了更大的靈活性,也比DLL更容易
創(chuàng)建。然而,在幾種情況下,DLL比程序包更適合工程的需要:
■程序代碼模塊從非C++Builder應(yīng)用程序調(diào)用。
?要擴(kuò)充Web服務(wù)器的功能。
?要?jiǎng)?chuàng)建給第三方開發(fā)人員使用的代碼模塊。
?工程是OLE容器。
2、簡述parent和owner的區(qū)別
答:Parent屬性是指構(gòu)件的包容器,構(gòu)件只能在此范圍內(nèi)顯示和移動。舉例子如
下:
(1)在Fonnl的窗體上,放一個(gè)Panell,并將Panel1拉大,
⑵在Panel1上放一Button1:
(3)在Forml上放一Button??
現(xiàn)在如果移動Panell,則Button1隨著Panel1移動,這是因?yàn)锽utton1的Parent是
Panel1?現(xiàn)在將Button2移到Panel1上,再次移動Panel1,Button?并不跟著移動,
這是因?yàn)锽utton?的Parent是Forml。除在窗體設(shè)計(jì)中,應(yīng)注意構(gòu)件的Parent是誰
外,在動態(tài)創(chuàng)建構(gòu)件時(shí),也應(yīng)指出構(gòu)件的Parent,如在上例中繼續(xù)操作:
l)ProcedureTfbrml.Button2click(Sender:Tobjet);
2)Var
3)Button:Tbutton;
4)Begin
5)Button:Tbutton.cerate(self);
6)Button.parent=panell;
7)Button.lleft=0;
8)Button.top=0;
9)Button.caption:=
#8217;OK
#8217;;
10)End;
當(dāng)按Button2時(shí),將在Panel1上創(chuàng)建一個(gè)Button,而如果把第6句改為
Button.parent:=self:按Button2時(shí),將在Forml上創(chuàng)建一個(gè)ButtonT<>如果將第6
句刪除,按Button2時(shí),什么都不會發(fā)生,這是因?yàn)閯?chuàng)建方法無法知道應(yīng)在哪里顯
示構(gòu)件。
Owner屬性是指構(gòu)件的所有者,它負(fù)責(zé)構(gòu)件的創(chuàng)建和釋放。如在上例中,系統(tǒng)默認(rèn)
窗體上所有構(gòu)件的所有者是窗體,而窗體的所有者是Application。順便指出,
create方法應(yīng)帶有表示構(gòu)件所有者的參數(shù),如在上例中,構(gòu)件所有者是窗體,即
selfo
Parent屬性和Owner屬性是運(yùn)行階段的屬性,只能在運(yùn)行階段,通過代碼設(shè)置。
3、簡述delphi是如何封裝windows消息機(jī)制
答:Delphi的消息處理流程
TApplication.OnMessage只在應(yīng)用程序的消息隊(duì)列接收到一個(gè)消息時(shí)才被觸發(fā)。
般應(yīng)用程序接收到的消息是與窗口管理有關(guān)的消息(例如WM_PAINT和
WM_SIZE),或由PostMessage()>PostAppMessage()或BroadcastsystemMessage()等
API函數(shù)發(fā)送出的消息。但是,由于Windows或SendMessage。有可能會繞過消息
隊(duì)列直接將消息發(fā)送給窗口過程。當(dāng)發(fā)生這種情況時(shí),TApplication.OnMessage就
不會被觸發(fā)。
VCL的消息系統(tǒng):
VCL定義了消息分發(fā)系統(tǒng),該系統(tǒng)將所有的Windows消息傳給相應(yīng)的對象,由各
對象的消息分發(fā)系統(tǒng)進(jìn)行處理。
VCL對象用于接受消息的方法叫做MainWndProc()?通過MainWndPorc??梢詫ο?/p>
息進(jìn)行任何的處理。不過,一般情況下很少直接調(diào)用MainWndProc。來處理消息,
除非不想讓消息通過VCL的消息系統(tǒng)分發(fā)。
從MainWndProc。反回后,消息被傳遞給對象的WndProc()的方法,這就是該對
象的窗體
過程,然后進(jìn)入VCL的分發(fā)機(jī)構(gòu)。分發(fā)機(jī)構(gòu)使用Disptch()方法把消息分發(fā)給一個(gè)
消息句柄。
消息到達(dá)該消息的處理句柄(Handler)后,經(jīng)過該句柄的處理,這個(gè)消息處理過
程就結(jié)束
了。事件
MainWndProc
WndProc
-Dispatch
-Handle
4、簡單介紹一下delphi模式下三層開發(fā)
答:RemoteDataModule服務(wù)器
數(shù)據(jù)庫
Query組件
DataSetProvider組件
客戶端應(yīng)用程序
DCOM組件
ClientDataSet組件
它不通過DataSetProvider組件來傳遞數(shù)據(jù),而是通過RemoteDataModule服務(wù)器
所提供的Interface來進(jìn)行數(shù)據(jù)的傳遞。這樣就使得應(yīng)用程序完全與數(shù)據(jù)庫服務(wù)器
沒有任何關(guān)系,對整個(gè)系統(tǒng)的升級與維護(hù)都帶來極大的好處。
對于集合數(shù)據(jù),由于Interface的返回值可以是OLEVarient類型,因此我們可以創(chuàng)
建ClientDataSet來進(jìn)行集合數(shù)據(jù)的傳遞。
5、談"一談你對vclframework的理解
答:VCLFramework實(shí)現(xiàn)了Windows消息機(jī)制的完美封裝。Dispatch分發(fā)消息分
為兩種情形:
1.消息被dispatch在虛擬方發(fā)表中找到并調(diào)用;
2.如果找不到的話,就調(diào)用TObject的defaultHandle虛擬方法,當(dāng)然也可以改寫這
個(gè)默認(rèn)調(diào)用方法,因?yàn)樗暶鞯臅r(shí)候是Virtual的。
6、簡單談一下你對delphi接口機(jī)制的理解
答:
1)不接口的引用計(jì)數(shù)管理
接口指針總是被初始化為nil
接口指針賦值為對象
接口指針賦值為接口指針
接口引用計(jì)數(shù)使用規(guī)則小結(jié)
2)接口對象的編譯器實(shí)現(xiàn)
接口對象的內(nèi)存空間
接口跳轉(zhuǎn)表
對象內(nèi)存空間中接口跳轉(zhuǎn)指針的初始化
3)implements的實(shí)現(xiàn)
以接口成員變量實(shí)現(xiàn)implements
以對象成員變量實(shí)現(xiàn)implements
7、ASP的幾大內(nèi)置對象。
答:內(nèi)置對象:Session,Server,Response,Request,ObjectContent,Application
8、談?wù)勀阋郧八鲰?xiàng)目對文件和圖片的上傳和顯示所用的方法。
答:上傳控件
9、談你對ASP的理解。
答:不會,沒理解
10、web開發(fā)客戶端程序和服務(wù)器端程序的區(qū)別
答:只需要開發(fā)服務(wù)器端啊,客戶端只要有個(gè)瀏覽器就行了
C/C++筆試題
一追雨制作
C/C++:
1.C與CH的異同,優(yōu)劣;
2.C,C++,VC,BC,TC的區(qū)別;
3.C++中y…catch關(guān)鍵字的用法與優(yōu)點(diǎn);
4.枚舉的用法,以及它與宏的區(qū)別;
5.const的用法,以及聲明const變量與宏的區(qū)別;
const的用法有四種:
區(qū)別:const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進(jìn)行類
型安全檢查,而對后者只能進(jìn)行字符替換,沒有類型
安全檢查。而且字符替換可能會帶來料想不到的邊界效應(yīng)。
有些集成化工具可以對const常量進(jìn)行調(diào)試,但不能對宏量進(jìn)行調(diào)試。
6.C++中引用與指針的區(qū)別;
答:1引用實(shí)際上是所引用的對象或變量的別名,而指針是包含所指向?qū)ο蠡蜃兞?/p>
的地址的變量。
2引用在定義時(shí)必須初始化,而指針在定義時(shí)不初始化。
3不可以有努NULL的引用,而可以有指向NULL的指針。
4引用在初始化后不可以改變引用關(guān)系,而指針可以隨時(shí)指向其他對象(非const
指針)。
7.C++中virtual與inline的含義分別是什么?
答:在基類成員函數(shù)的聲明前加上virtual關(guān)鍵字,意味著將該成員函數(shù)聲明為虛
函數(shù)。
inline與函數(shù)的定義體放在一起,使該函數(shù)稱為內(nèi)聯(lián)。inline是一種用于實(shí)現(xiàn)的關(guān)鍵
字,而不是用于聲明的關(guān)鍵字。
虛函數(shù)的特點(diǎn);如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定
義為虛方法,這樣可以啟用動態(tài)聯(lián)編。
內(nèi)聯(lián)函數(shù)的特點(diǎn);使用內(nèi)聯(lián)函數(shù)的目的是為了提高函數(shù)的運(yùn)行效率。內(nèi)聯(lián)函數(shù)體的
代碼不能過長,因?yàn)閮?nèi)聯(lián)函數(shù)省去調(diào)用函數(shù)
的時(shí)間是以代碼膨脹為代價(jià)的。內(nèi)聯(lián)函數(shù)不能包含循環(huán)語句,因?yàn)閳?zhí)行循環(huán)語句要
比調(diào)用函數(shù)的開銷大。
一個(gè)函數(shù)能否即是虛函數(shù)又是內(nèi)聯(lián)函數(shù)?
8.以下關(guān)鍵字的含義與用法:
extern,extern"C",static,explicit,register,#undef,#ifhdef
9.什么是函數(shù)重載與覆蓋?
為什么C不支持函數(shù)重載?
為什么C++能支持函數(shù)重載?
10.VC中,編譯工具條內(nèi)的Debug與Release選項(xiàng)是什么含義?
11.編寫my_memcpy函數(shù),實(shí)現(xiàn)與庫函數(shù)memcpy類似的功能,不能使用任何庫
函數(shù);
void*mymemcpy(void*pvTo,constchar*pvFrom,sizetsize)
(
assert((dest!=NULL)
amp;
amp;(src!=NULL));
byte*psTo=(byte*)pvTo;
byte*psFrom=(byte*)pvFrom;
while(size
>0)
{
*psTo++=*psFrom++;
s
returnpvTo;
}
12.編寫my_scpy函數(shù),實(shí)現(xiàn)與庫函數(shù)scpy類似的功能,不能使用任何庫函數(shù);
答:char*my_scpy(char*sdest,constchar*ssrc)
assert(sdest!=NULL)
amp;
amp;(ssrc!=NULL))
char*address=sdest;
while((*sdest++=*ssrc-H-)!=NULL)
returnaddress;
13.編寫gbk_slen函數(shù),計(jì)算含有漢字的字符串的長度,漢字作為一個(gè)字符處
理;
已知:漢字編碼為雙字節(jié),其中首字節(jié)
<0,尾字節(jié)在0?63以外;(如果一個(gè)字節(jié)是-128?127)
14.函數(shù)assert的用法?
答:斷言assert是僅在debug版本起作用的宏,用于檢查“不應(yīng)該“發(fā)生的情況。程
序員可以把a(bǔ)ssert看成一個(gè)
在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測試手段。
15.為什么在頭文件的最前面都會看到這樣的代碼:
#ifndef_STDIO_H_
//define_STDIO_H
16.為什么數(shù)組名作為參數(shù),會改變數(shù)組的內(nèi)容,而其它類型如int卻不會改變變
量的值?
答:當(dāng)數(shù)組名作為參數(shù)時(shí),傳遞的實(shí)際上是地址。而其他類型如int作為參數(shù)時(shí),
由于函數(shù)參數(shù)值實(shí)質(zhì)上是實(shí)參的一份拷貝,被調(diào)
函數(shù)內(nèi)部對形參的改變并不影響實(shí)參的值。
1.實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù)。
2.寫一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。
3.Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程。
4.如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函數(shù)?
5.C++里面是不是所有的動作都是main()引起的?如果不是,請舉例。
6.C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)?
7.下列哪兩個(gè)是等同的
intb;
Aconstint*a=
amp;b;
Bconst*inta=
amp;b;
Cconstint*consta=
amp;b;
Dintconst*consta=
amp;b;
8.內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查?
voidg(base
amp;b){
b.play;
j
voidmain(){
sons;
g(s);
return;
)
3、WinMain
while((bRet=GetMessage(
amp;msg,NULL,0,0))!=0)
if(bRet==-1)
//handletheerrorandpossiblyexit
else
TranslateMessage(
amp;msg);
DispatchMessage(
amp;msg);
MSRAInterviewWrittenExam(December2003,Time:2.5Hours)
1寫出下列算法的時(shí)間復(fù)雜度。
⑴冒泡排序;
(2)選擇排序;
(3)插入排序;
(4)快速排序;
⑸堆排序;
⑹歸并排序;
2寫出下列程序在X86上的運(yùn)行結(jié)果。
suetmybitfields
unsignedshorta:4;
unsignedshortb:5;
unsignedshortc:7;
}test
voidmain(void)
inti;
test.a=2;
test.b=3;
test.c=0;
i=*((short*)
amplest);
prints
%d\n
,i);
)
3寫出下列程序的運(yùn)行結(jié)果。
unsignedinti=3;
cout
<
<i*-1;
4寫出下列程序所有可能的運(yùn)行結(jié)果。
inta;
intb;
intc;
voidF1()
b=a*2;
a=b;
voidF2()
c=a+l;
a=c;
}
main()
{
a=5;
//StartF1,F2inparallel
Fl();F2();
print]
a=%d\n
,a);
)
C++算法面試題
一追雨制作
算法:
1.什么是NPC,NP-Hard?
2.起泡排序的時(shí)間復(fù)雜度是多少?
說出至少一個(gè)比它更快的算法;
排序的極限時(shí)間復(fù)雜度是多少?
3.有一個(gè)鏈表,如何判斷它是一個(gè)循環(huán)鏈表?
如果鏈表是單向的呢?
如果出現(xiàn)循環(huán)的點(diǎn)可能在任意位置呢?
如果緩存空間是有限的,比如是一個(gè)常數(shù)呢?
如果只能使用2個(gè)緩存呢?
4.有一個(gè)文件,保存了若干個(gè)整數(shù),如何以平均的概率隨機(jī)得到其中的一個(gè)整
數(shù)?
如果整數(shù)的個(gè)數(shù)是未知的呢?
如果整數(shù)是以字符串形式存放,如:(即如何得到隨機(jī)的一個(gè)字符串)
123
<enter>
-456
<enter>
如果只允許便歷文件一次呢?
5.用兩組數(shù)據(jù),都在內(nèi)存中,對它們排序分別需要1和2分鐘;那么使用兩個(gè)線
程一起排序,大概需要多少時(shí)間?
上海貝爾的面試題43分即可進(jìn)入復(fù)試
—追雨制作
一、請?zhí)顚態(tài)OOL,float,指針變量與“零值”比較的if語句。(10
分)
提示:這里“零值”可以是0,0.0,FALSE或者“空指針”。例如int變量n與“零直,比
較的if語句為:
if(n=0)
if(n!=0)
以此類推。
請寫出BOOLflag與“零值”比較的if語句:
請寫出floatx與“零值''比較的if語句:
請寫出char*p與“零值”比較的if語句:
二、以下為WindowsNT下的32位C++程序,請計(jì)算sizeof的值(10分)
chars[]="Hello";
char*p=s;
intn=10;
請計(jì)算
sizeof(s)=
sizeof(p)=
sizeof(n)=voidFunc(chars[100])
[
請計(jì)算
sizeof(s)=
)
void*p=malloc(100);
請計(jì)算
sizeof(p)=
、簡答題(25分)
1、頭文件中的ifndef/define/endif干什么用?
2、#include
<filename.h>和#include"filename.h”有什么區(qū)別?
3、const有什么用途?(請至少說明兩種)
4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C”聲明?
5、請簡述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)
〃第一個(gè)
for(i=0;i
<N;i++)
(
if(condition)
DoSomething();
else
DoOtherthingO;
}〃第二個(gè)
if(condition)
(
for(i=0;i
<N;i++)
DoSomething();
i
f
else
(
for(i=0;i
<N;i++)
DoOtherthing();
優(yōu)點(diǎn):N次中,每次都要對condition進(jìn)行判斷
缺點(diǎn):優(yōu)點(diǎn):一次判斷condition后,對something或Otherthing執(zhí)行N次
缺點(diǎn):
四、有關(guān)內(nèi)存的思考題(20分)
voidGetMemory(char*p)
p=(char*)malloc(100);
voidTest(void)
char*s=NULL;
GetMemory(s);
q
#8220;hclloworld
);
printRs);
)
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
char*GetMemory(void)
(
charp[]=
#8220;helloworld
returnp;
voidTest(void)
char*s=NULL;
s=GetMemory();
printf(s);
}
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
VoidGetMemory2(char**p,intnum)
*p=(char*)malloc(num);
voidTest(void)
(
char*s=NULL;
GetMemory(
amp;s?100);
scpy(s,
#8220;hello
);
printf(s);
\
J
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
voidTest(void)
char*s=(char*)malloc(lOO);
scpy(s,"hello");
free(s);
iRs!=NULL)
{
scpy(s,"world");
printf(s);
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
五、編寫scpy函數(shù)(10分)
已知scpy函數(shù)的原型是
char*scpy(char*sDest,constchar*sSrc);
其中sDest是目的字符串,sSrc是源字符串。
(1)不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù)scpy
char*scpy(char*sDest,constchar*sSrc){
intn=0;
while(sSrc[n]!=NULL){
n++:
)
*srtDest=newchar[n];
fbr(inti=0;i
vn;i++){
sDest=sSrc[i];
i++;
f
return*sDest;
\
f
(2)scpy能把sSrc的內(nèi)容復(fù)制到sDest,為什么還要char*類型的返回值?
因?yàn)樵摵瘮?shù)的還可以把復(fù)制的字符串首地址指針給其他的指針,而且這種需要也是
有用的。
六、編寫類Sing的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)
已知類Sing的原型為:
classSing
public:
Sing(constchar*s=NULL);//普通構(gòu)造函數(shù)
Sing(constSing
amp;other);//拷貝構(gòu)造函數(shù)
?Sing(void);//析構(gòu)函數(shù)
Sing
amp;operate=(constSing
amp;other);//賦值函數(shù)
private:
char*m_data;//用于保存字符串
};
請編寫Sing的上述4個(gè)函數(shù)。
〃答案一并給出
-、請?zhí)顚態(tài)OOL,float,指針變量與“零值”比較的if語句。(10分)
請寫出BOOLflag與“零值”比較的if語句。(3分)
標(biāo)準(zhǔn)答案:
if(flag)
if(!flag)如下寫法均屬不良風(fēng)格,不得分。
if(flag==TRUE)
if(flag=1)
if(flag==FALSE)
if(flag==0)
請寫出floatx與“零值”比較的if語句。(4分)
標(biāo)準(zhǔn)答案示例:
constfloatEPSINON=0.00001;
if((x>=
EPSINON)
amp;
amp;(x
<=EPSINON)
不可將浮點(diǎn)變量用“=”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“
<=”此類形式。
如下是錯(cuò)誤的寫法,不得分。
if(x==0.0)
if(x!=0.0)
請寫出char*p與“零值”比較的if語句。(3分)
標(biāo)準(zhǔn)答案:
if(p=NULL)
if(p!=NULL)如下寫法均屬不良風(fēng)格,不得分。
if(P==0)
if(p!=0)
if(P)
if(!)
二、以下為WindowsNT下的32位C++程序,請計(jì)算sizeof的值(10分)
chars[]="Hello”;
char*p=s;
intn=10;
請計(jì)算
sizeof(s)=6(2分)
sizeof(p)=4(2分)
sizeof(n)=4(2分)voidFunc(chars[100])
請計(jì)算
sizeoRs)=4(2分)
void*p=malloc(100);
請計(jì)算
sizeof(p)=4(2分)
三、簡答題(25分)
1、頭文件中的ifndef/define/endif干什么用?(5分)
答:防止該頭文件被重復(fù)引用。
2、#include
〈filename.h>和#include"filename.h”有什么區(qū)別?(5分)
答:對于#include
<filcnamc.h>,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索filename.h
對于#include"filename.h”,編譯器從用戶的工作路徑開始搜索filename.h
3、const有什么用途?(請至少說明兩種)(5分)
答:(1)可以定義const常量
(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東
西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動,能提高程序的健壯性。
4、在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加extern“C”?(5
分)
答:C++語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被C++編譯后在庫中的
名字與C語言的不同。假設(shè)某個(gè)函數(shù)的原型為:voidfoo(intx,inty);
該函數(shù)被C編譯器編譯后在庫中的名字為_fo。,而C++編譯器則會產(chǎn)生像
foointint之類的名字。
CH提供了C連接交換指定符號extern—”來解決名字匹配問題。
5、請簡述以下兩個(gè)for循環(huán)的優(yōu)缺點(diǎn)(5分)
for(i=0;i
<N;i++)
if(condition)
DoSomething();
else
DoOtherthing();
}if(condition)
for(i=0;i
<N;i++)
DoSomething();
else
for(i=0;i
<N;i++)
DoOtherthingO;
優(yōu)點(diǎn):程序簡潔
缺點(diǎn):多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能
對循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點(diǎn):循環(huán)的效率高
缺點(diǎn):程序不簡潔
四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)
voidGetMemory(char*p)
p=(char*)malloc(100);
voidTest(void)
char*s=NULL;
GetMemory(s);
qrnvrq
#8220;helloworld
);
printf(s);
I
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
答:程序崩潰。
因?yàn)镚etMemory并不能傳遞動態(tài)內(nèi)存,
Test函數(shù)中的s一直都是NULL。
#8220;helloworld
);將使程序崩潰。
char*GetMemory(void)
{
charp[]=
#8220;helloworld
returnp;
j
voidTest(void)
/
i
char*s=NULL;
s=GetMemory();
printf(s);
}
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
答:可能是亂碼。
因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是NULL,但其
原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。
voidGetMemory2(char**p,intnum)
{
*p=(char*)malloc(num);
)
voidTest(void)
{
char*s=NULL;
GetMemory(
amp;s,100);
scpy(s,
#8220;hello
);
printf(s);
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
答:
(1)能夠輸出hello
(2)內(nèi)存泄漏
voidTest(void)
char*s=(char*)malloc(lOO);
scpy(s,"hello");
free(s);
if(s!=NULL)
(
scpy(s,"world");
primes);
}
)
請問運(yùn)行Test函數(shù)會有什么樣的結(jié)果?
答:篡改動態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。
因?yàn)閒ree(s);之后,s成為野指針,
if(s!=NULL)語句不起作用。
27費(fèi)波那其數(shù)列,1,1,2,3,5……編寫程序求第十項(xiàng)??梢杂眠f歸,也可以用
其他方法,但要說明你選擇的理由。
#include
#include
<cslib>
intPheponatch(int);
intPheponatch2(int);
intmain()
(
prints
The10this%d
,Pheponatch2(20));
system(
pause
);
return0;
)
〃遞歸算法
intPheponatch(intN)
if(N==1||N=2)
return1;
else
returnPheponatch(N-1)+Pheponatch(N-2);
//非遞歸算法
intPheponatch2(intN)
intx=1,y=1,temp;
inti=2;
while(ue)
temp=y;
y=x+y;
x=temp;
i++;
if(i==N)
break;
returny;
}
25.完成下列程序
*
**
***
*
#8230;*
#8230;*
#8230;*
#8230;
*
#8230;.*
#8230;.*
#8230;.*
#8230;.*
#8230;.
*
#8230;..*
#8230;..*
#8230;..*
#8230;..*
#8230;..*
#8230;..
*
#8230;
#8230;*
#8230;
#8230;*
#8230;
#8230;*
#8230;
#8230;*
#8230;
#8230;*
#8230;
#8230;*
#8230;
#8230;
*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.*
#8230;
#8230;.
#include
#defineN8
intmain()
inti;
intj;
intk;
II
II
II
>
>
jnoo
(++斗”+!?N>
X:【=斗)2;
6
*
>
>
jnoo
}
(++-l+!-N>
f:0=D噂
)
(
!:【=<!-N=!)JQJ
入mi
ifnn
!iJUI
}
()UIBLUJUI
8Nougop#
<qiUE3SOl>
apnpui#
叩叩ui#
(
:0mnjoj
cout
<
<
\n
}
return0;
#8220;28下列程序運(yùn)行時(shí)會崩潰,請找出錯(cuò)誤并改正,并且說明原因。
//voidappend(intN);
//指針沒有初始化:
//NewNode->left=NULL;
//NewNode->right=NULL;
#include
#include
<malloc.h>
typedefsuetTNode{
TNode*left;
TNode*right;
intvalue;
}TNode;
TNode*root=NULL;
voidappend(intN);
intmain()
(
append(63);
append(45);
append(32);
append(77);
append(96);
append(21);
append(17);//Again,數(shù)字任意給出
return0;
J
voidappend(intN)
TNode*NewNode=(TNode*)maIloc(sizeof(TNode));
NewNode->value=N;
NewNode->left=NULL;
NewNode->right=NULL;
if(root=NULL)
t
root=NewNode;
return;
}
else
(
TNode*temp;
temp=root;
while((N>=temp->value
amp;
amp;temp->left!=NULL)||(N
right!=NULL))
(
while(N>=temp->value
amp;
amp;temp->left!=NULL)
temp=temp->left;
while(N
right!=NULL)
temp=temp->right;
)
if(N>=temp->value)
temp->left=NewNode;
else
temp->right=NewNode;
return;
)
C++面試題集(5)
—追雨制作
62:8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?
<
<IBM?
63.怎樣用最快的方法判斷鏈表是否有環(huán)?
64.C++中引用和指針有什么不同?指針加上什么限制等于引用?
答:1引用被創(chuàng)建的時(shí)候必須被初始化,而指針不是必需的。2引用在創(chuàng)建后就不
能改變引用的關(guān)系,而指針在初始化后可以隨時(shí)指向
其它的變量或?qū)ο蟆?沒有NULL引用,引用必須與合法的存儲單元關(guān)聯(lián),而指針
可以是NULL。
65.做的項(xiàng)目,遇到的困難,怎樣解決?
69.操作符重載
classCMyObject:pulicCObject
{
Public:
CMyObject();
CMyObject
amp;operator=(constCMyObject
amp;my);
private:
CSingsName;
intnld:
J,
請重載賦值操作符
70.鏈表
SuetsuctList
(
intvalue;
suctList*pHead;
)
SuetLinkedList*pMyList;
請編寫刪除鏈表的頭、尾和第n個(gè)節(jié)點(diǎn)的程序
7L用SocketAPI制作一個(gè)聊天程序,通訊協(xié)議使用tcp/ip。要求有簡單界面即可,
支持多人聊天。
72.如果有過工作經(jīng)驗(yàn),請說明在先前公司的工作以及離職原因(如無,請說明畢
業(yè)后的個(gè)人展望)
***
73對于C++中類(class)與結(jié)構(gòu)(suet)的描述正確的為:
A,類中的成員默認(rèn)是private的,當(dāng)是可以聲明為public,private和protected,結(jié)構(gòu)中定
義的成員默認(rèn)的都是public;
B,結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中可以定義成員函數(shù);
C,結(jié)構(gòu)實(shí)例使用mallocO動態(tài)創(chuàng)建,類對象使用new操作符動態(tài)分配內(nèi)存;
D,結(jié)構(gòu)和類對象都必須使用new創(chuàng)建;
E,結(jié)構(gòu)中不可以定義虛函數(shù),當(dāng)是類中可以定義虛函數(shù).
F,結(jié)構(gòu)不可以存在繼承關(guān)系,當(dāng)是類可以存在繼承關(guān)系.
答:A,D,F
74,兩個(gè)互相獨(dú)立的類:ClassA和ClassB,都各自定義了非靜態(tài)的公有成員函數(shù)
PublicFunc()和非靜態(tài)的私有成員函數(shù)PrivateFunc();
現(xiàn)在要在ClassA中增加定義一個(gè)成員函數(shù)ClassA::AdditionalPunction(ClassA
a,ClassBb);則可以在AdditionalPunction(ClassAx,ClassBy)的實(shí)現(xiàn)部分(函數(shù)功能體
內(nèi)部)
出現(xiàn)的合法的表達(dá)是最全的是:
A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();
B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();
C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();
D,x.PublicFunc();y.PublicFunc();
答:B
75,C++程序下列說法正確的有:
A,對調(diào)用的虛函數(shù)和模板類都進(jìn)行遲后編譯.
B,基類與子類中函數(shù)如果要構(gòu)成虛函數(shù),除了要求在基類中用virtual聲名,而且必須
名字相同且參數(shù)類型相同返回類型相同
C,重載的類成員函數(shù)都必須要:或者返回類型不同,或者參數(shù)數(shù)目不同,或者參數(shù)序列
的類型不同.
D,靜態(tài)成員函數(shù)和內(nèi)聯(lián)函數(shù)不能是虛函數(shù),友員函數(shù)和構(gòu)造函數(shù)也不能是虛函數(shù),但
是析構(gòu)函數(shù)可以是虛函數(shù).
答:A
***
76,C++中的類與結(jié)構(gòu)的區(qū)別?
77,構(gòu)造函數(shù)和析構(gòu)函數(shù)是否可以被重載,為什么?
答:構(gòu)造函數(shù)可以被重載,析構(gòu)函數(shù)不可以被重載。因?yàn)闃?gòu)造函數(shù)可以有多個(gè)且可
以帶參數(shù),而析構(gòu)函數(shù)只能有一個(gè),目不能帶參數(shù)。
78,一個(gè)類的構(gòu)造函數(shù)和析構(gòu)函數(shù)什么時(shí)候被調(diào)用,是否需要手工調(diào)用?
答:構(gòu)造函數(shù)在創(chuàng)建類對象的時(shí)候被自動調(diào)用,析構(gòu)函數(shù)在類對象生命期結(jié)束時(shí);
由系統(tǒng)自動調(diào)用。
1#include"filename.h”和#include
<filename.h>的區(qū)別?
答:#include“filename.h”表明該文件是用戶提供的頭文件,查找該文件時(shí)從當(dāng)前
文件目錄開始;#include
<filename.h>表明這個(gè)文件是一個(gè)工程或標(biāo)準(zhǔn)頭文件,查找過程會檢查預(yù)定義的目
錄。
2頭文件的作用是什么?
答:一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公
布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需要按照頭文件中的接口聲
明來調(diào)用庫功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會從庫中提取相應(yīng)的代碼。
二頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文
件中的聲明不一致,編譯器就會指出錯(cuò)誤,這一簡單的規(guī)則能大大減輕程序員調(diào)
試、改錯(cuò)的負(fù)擔(dān)。
3C++函數(shù)中值的傳遞方式有哪兒種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。
4內(nèi)存的分配方式的分配方式有幾種?
答:一、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在
程序的整個(gè)運(yùn)行期間都存在。例如全局變量。
二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,
函數(shù)執(zhí)行結(jié)束時(shí)這些存儲單元自動被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集
中,效率很高,但是分配的內(nèi)存容量有限。
三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請任
意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存
期由我們決定,使用非常靈活,但問題也最多。
5實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù);
答:雙向鏈表刪除一個(gè)節(jié)點(diǎn)P
template
<classtype>voidlist
::delnode(intp)
intk=l;
listnode
p=first;
while(p->next!=NULL
amp;
amp;k!=p)
p=p->next;
k++;
t=p->next;
cout
<
<
你已經(jīng)將數(shù)據(jù)項(xiàng)
#8220;
<
<t->data
<
<
刪除
<
<endl;
p->next=p->next->next;
length
deletet;
}
在節(jié)點(diǎn)p后插入一個(gè)節(jié)點(diǎn):
template
<classtype>boollist
::insert(typet,intp)
listnode
*p;
p=first;
intk=l;
while(p!=NULL
amp;
amp;k
<P)
p=p->next;
k++;
if(p=NULL
amp;
amp;k!=p)
returnfalse;
else
(
listnode
*tp;
tp=newlistnode
tp->data=t;
tp->next=p->next;
p->next=tp;
length++;
returnue;
\
f
\
f
C++面試題集(4)
一追雨制作
52.以下代碼有什么問題?[STL易]
typedefvectorIntArray;
IntArrayarray;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
〃刪除array數(shù)組中所有的2
for(IntArray::iteratoritor=array.begin();itor!=array.end();-H-itor)
if(2=*itor)array.erase(itor);
)
53.寫一個(gè)函數(shù),完成內(nèi)存之間的拷貝。[考慮問題是否全面]
答:
void*mymemcpy(void*dest,constvoid*src,size_tcount)
char*pdest=static_cast
<char*>(dest);
constchar*psrc=static_cast
<constchar*>(src);
if(pdest>psrc
amp;
amp;pdest
<psrc+cout)能考慮到這種情況就行了
for(size_ti=count-l;i!=-l;
i)
pdest[i]=psrc[i];
else
for(size_ti=0;i
<count;++i)
pdestfi]=psrc[i];
returndest;
intmain(void)
chars[]=
#8220;0123456789
#8243;;
mymemcpy(s+1,s+0,9);
cout
<
<s
<
<endl;
system(
#8220;Pause
);
return0;
)
54線程與進(jìn)程的區(qū)別
55:請你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?
56:請你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,主要有什么作用?TCP
與UDP呢?
IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實(shí)現(xiàn)了Internet中自動路由的功能,即尋徑的功能,
TCP協(xié)議是一個(gè)傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠傳輸?shù)奶匦?,向上提?/p>
一個(gè)可靠的點(diǎn)到點(diǎn)的傳輸,UDP提供的是一種無連接的服務(wù),主要考慮到很多應(yīng)用
不需要可靠的連接,但需要快速的傳輸
57:請問交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的?
交換機(jī)用在局域網(wǎng)中,交換機(jī)通過紀(jì)錄局域網(wǎng)內(nèi)各節(jié)點(diǎn)機(jī)器的MAC地質(zhì)(物理地
址)就可以實(shí)現(xiàn)傳遞報(bào)文,無需看報(bào)文中的IP地質(zhì)。路由器識別不同網(wǎng)絡(luò)的方法是通
過識別不同網(wǎng)絡(luò)的網(wǎng)絡(luò)ID號(IP地址的高端部分)進(jìn)行的,所以為了保證路由成
功,每個(gè)網(wǎng)絡(luò)都必須有一個(gè)唯一的網(wǎng)絡(luò)編號。路由器通過察看報(bào)文中IP地址,來
決定路徑,向那個(gè)子網(wǎng)(下一跳)路由,也就是說交換機(jī)工作在數(shù)據(jù)鏈路層看MAC
地址,路由器工作在網(wǎng)際層看IP地質(zhì)
但是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交換機(jī)的功能有由路由器的功能(交
換試路由器)使得兩者界限越來越模糊。
58:請問C++的類和C里面的suet有什么區(qū)別?
59:請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
60:全局變量和局部變量有什么區(qū)別?實(shí)怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知
道的?
全局變量是整個(gè)程序都可訪問的變量,誰都可以訪問,生存期在整個(gè)程序從運(yùn)行到
結(jié)束(在程序結(jié)束時(shí)所占內(nèi)存釋放),而局部變量存在于模塊(子程序,函數(shù))中,只
有所在模塊可以訪問,其他模塊不可直接訪問,模塊結(jié)束(函數(shù)調(diào)用完畢),局部變
量消失,所占據(jù)的內(nèi)存釋放。
全局變量分配在全局?jǐn)?shù)據(jù)段并且在程序開始運(yùn)行的時(shí)候被加載.局部變量則分配在
堆棧里面。
61:一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識。
2、交換機(jī)用在局域網(wǎng)中,交換機(jī)通過紀(jì)錄局域網(wǎng)內(nèi)各節(jié)點(diǎn)機(jī)器的MAC地質(zhì)(物理
地址)就可以實(shí)現(xiàn)傳遞報(bào)文,無需看報(bào)文中的IP地質(zhì)。路由器識別不同網(wǎng)絡(luò)的方法是
通過識別不同網(wǎng)絡(luò)的網(wǎng)絡(luò)ID號(IP地址的高端部分)進(jìn)行的,所以為了保證路由成
功,每個(gè)網(wǎng)絡(luò)都必須有一個(gè)唯一的網(wǎng)絡(luò)編號。路由器通過察看報(bào)文中IP地址,來
決定路徑,向那個(gè)子網(wǎng)(下一跳)路由,也就是說交換機(jī)工作在數(shù)據(jù)鏈路層看MAC
地址,路由器工作在網(wǎng)際層看IP地質(zhì)
但是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交換機(jī)的功能有由路由器的功能(交
換試路由器)使得兩者界限越來越模糊。
3、IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實(shí)現(xiàn)了Internet中自動路由的功能,即尋徑的功
能,TCP協(xié)議是一個(gè)傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠傳輸?shù)奶匦裕蛏?/p>
提供一個(gè)可靠的點(diǎn)到點(diǎn)的傳輸,UDP提供的是一種無連接的服務(wù),主要考慮到很多
應(yīng)用不需要可靠的連接,但需要快速的傳輸
4、
Testb();〃定義了一個(gè)函數(shù)
C++面試題集(3)
一追雨制作
39.解釋局部變量、全局變量和靜態(tài)變量的含義。
40.解釋堆和棧的區(qū)別。
棧區(qū)(stack)—由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。
其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
堆:一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收。注意
它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于
鏈表.
41.論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。
42.以下三條輸出語句分別輸出什么?[C易]
charsl[]=
#8220;abc
chars2[]=
#8220;abc
constchars3[]=
#8220;abc
constchars4[]=
#8220;abc
constchar*s5=
#8220;abc
constchar*s6=
#8220;abc
cout
<
<boolalpha
<
<(sl==s2)
<
<endl;//輸出什么?
cout
<
<boolalpha
<
<(s3==s4)
<
Vendl;〃輸出什么?
cout
<
<boolalpha
<
<(s5==s6)
<
<endl;//輸出什么?
43.非C++內(nèi)建型別A和B,在哪幾種情況下B能隱式轉(zhuǎn)化為A?[C++中等]
答:
a.classB:publicA{……}〃B公有繼承自A,可以是間接繼承的
b.classB{operatorA();}//B實(shí)現(xiàn)了隱式轉(zhuǎn)化為A的轉(zhuǎn)化
c.classA{A(constB
amp;);}//A實(shí)現(xiàn)了non-explicit的參數(shù)為B(可以有其他帶默認(rèn)值的參數(shù))構(gòu)造函
數(shù)
d.A
amp;operator=(constA
amp;);〃賦值操作,雖不是正宗的隱式類型轉(zhuǎn)換,但也可以勉強(qiáng)算一個(gè)
44.以下代碼中的兩個(gè)sizeof用法有問題嗎?[C易]
voidUpperCase(chars口)〃將s中的小寫字母轉(zhuǎn)換成大寫字母
fbr(sizeti=0;i
<sizeof(s)/sizeof(s[0]);++i)
if(
#8216;a
#8217;
<=s[i]
amp;
amp;s[i]
<=
#8217;z
#8217;)
s[i]-=(
#8217;a'-
#8217;A
#8217;);
chars[]=
#8220;aBcDe
cout
<
<
#8220;s字符長度為:
<sizeof(s)/sizeof(s[0])
<
<endl;
UpperCase(s);
cout
<
<s
<
<endl;
45.以下代碼有什么問題?[C難]
voidchar2Hex(charc)//將字符以16進(jìn)制表示
charch=c/0
#215;10+
#8216;0
#8242;;if(ch>
#8216;9
#8242;)ch+=(
#8217;A'-
#8217;9
#8242;-1);
charcl=c%0
#215;10+
#8216;0
#8242;;if(cl>
#8216;9
#8242;)cl+=(
#8217;A'-
#8217;9
#8242;4);
cout
<
<ch
<
<cl
<
<
#8216;
#8216;;
chars[]=
#8220;Ilove中國
fbr(sizeti=0;i
<slen(s);++i)
char2Hex(s[i]);
cout
<
<endl;
46.以下代碼有什么問題?[C++易]
suetTest
Test(int){}
Test(){}
voidfiin(){}
};
voidmain(void)
Testa(l);
a.fun();
Testb();
b.fun();
)
***Testb();〃定義了一個(gè)函數(shù)
47.以下代碼有什么問題?[C++易]
cout
<
<(ue?1:
1
#8243;)
<
<endl;
8.以下代碼能夠編譯通過嗎,為什么?[C++易]
unsignedintconstsizel=2;
charsl[sizel];
unsignedinttemp=0;
cin?temp;
unsignedintconstsize2=temp;
chars2[size2];
48.以下代碼中的輸出語句輸出0嗎,為什么?[C++易]
suetCLS
{
intmi;
CLS(inti):m_i(i){}
CLS()
CLS(O);
);
CLSobj;
cout
<
<obj.mi
<
<endl;
49.C++中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?[C++易]
答:
classEmpty
public:
Empty();//缺省構(gòu)造函數(shù)
Empty(constEmpty
amp;);〃拷貝構(gòu)造函數(shù)
~Empty();//析構(gòu)函數(shù)
Empty
amp;operator=(constEmpty
amp;);//賦值運(yùn)算符
Empty*operator
amp;();//取址運(yùn)算符
constEmpty*operator
amp;()const;//取址運(yùn)算符const
);
50.以下兩條輸出語句分別輸出什么?[C++難]
floata=l.Of;
cout
<
<(int)a
<
<endl;
cout
<
<(int
amp;)a
<
<endl;
cout
<
<boolalpha
<
<((int)a==(int
amp;)a)
<
vendl;〃輸出什么?
floatb=O.Of;
cout
<
<(int)b
<
<endl;
cout
<
<(int
amp;)b
<
<endl;
cout
<
<boolalpha
<
<((int)b=(int
amp;)b)
<
vendl;〃輸出什么?
51.以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?[STL易]
vectorarray;
array.push_back(1);
array.push_back(2);
array.push_back(3);
fbr(vector::size_typei=array.size()-l;i>=0;
i)〃反向遍歷array數(shù)組
cout
<
<array[i]
<
<endl;
C++面試題集(2)
一追雨制作
11下列哪兩個(gè)是等同的
intb;
Aconstint*a=
amp;b;
Bconst*inta=
amp;b;
Cconstint*consta=
amp;b;
Dintconst*consta=
amp;b;
12內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查
13三個(gè)float:a,b,c
問值
(a+b)+c=(b+a)+c
(a+b)+c=(a+c)+b
14把一個(gè)鏈表反向填空
voidreverse(test*head)
(
test*pe=head;
test*ps=head->next;
while(ps)
(
pe->next=ps->next;
ps->next=head;
head=ps;
ps=pe->next;
}
}
15設(shè)計(jì)i個(gè)重采樣系統(tǒng),說明如何anti-alias
16某個(gè)程序在一個(gè)嵌入式系統(tǒng)Q00M的CPU,50M的SDRAM)中已經(jīng)最化了,換到
另一個(gè)系統(tǒng)(300M的CPU,50M的SDRAM)中運(yùn)行,還需要優(yōu)化嗎?
17.下面哪種排序法對12354最快
aquicksort
b.bublesort
c.mergesort
18.哪種結(jié)構(gòu),平均來講,獲取一個(gè)值最快
a.binaryee
b.hashtable
c.stack
19請問C++的類和C里面的suet有什么區(qū)別?
答:C++的類的成員默認(rèn)情況下是私有的,C的suet的成員默認(rèn)情況下是公共的.
20請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
答:析構(gòu)函數(shù)的作用是當(dāng)對象生命期結(jié)束時(shí)釋放對象所占用的資源。析構(gòu)函數(shù)用
法:析構(gòu)函數(shù)是特殊的類成員函數(shù)
它的名字和類名相同,沒有返回值,沒有參數(shù)不能隨意調(diào)用也沒有重載。只是在類
對象生命期結(jié)束時(shí)有系統(tǒng)自動調(diào)用。
虛函數(shù)用在繼承中,當(dāng)在派生類中需要重新定義基類的函數(shù)時(shí)需要在基類中將該函
數(shù)聲明為虛函數(shù),作用為使程序支持動態(tài)聯(lián)遍。
21全局變量和局部變量有什么區(qū)別?是怎么實(shí)現(xiàn)的?操作系統(tǒng)和編譯器是怎么知
道的?
答:一些變量整個(gè)程序中都是可見的,它們稱為全局變量,?些變量在函數(shù)內(nèi)部定
義且只在函數(shù)中可知,則稱為局部變量。
全局變量由編譯器建立且存放在內(nèi)存的全局?jǐn)?shù)據(jù)區(qū),局部變量存放在棧區(qū)
22-些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識。
238086是多少尉的系統(tǒng)?在數(shù)據(jù)總線上是怎么實(shí)現(xiàn)的?
24多態(tài)。overload和override的區(qū)別。
答:重載在相同范圍(同一個(gè)類中),函數(shù)名字相同,參數(shù)不同,virtual關(guān)鍵字可
有可無。
覆蓋是指派生類函數(shù)覆蓋基類函數(shù),不同的范圍,函數(shù)名字相同,參數(shù)相同,基類
函數(shù)必須有virtual關(guān)鍵字。
C++面試題集(1)
—追雨制作
1#include"filename.h”和#include
〈filename.h>的區(qū)別?
答:對于#include
<61ename.h>編譯器從標(biāo)準(zhǔn)庫開始搜索filename.h
對于#include“filename.h”編譯器從用戶工作路徑開始搜索filename.h
2頭文件的作用是什么?
答:一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公
布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需
要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會
從庫中提取相應(yīng)的代碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文
件中的聲明不一致,編譯器就會指出錯(cuò)誤,這一簡單的規(guī)
則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
3C++函數(shù)中值的傳遞方式有哪兒種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。
4內(nèi)存的分配方式的分配方式有幾種?
答:一、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在
程序的整個(gè)運(yùn)行期間都存在。例如全局變量。
二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,
函數(shù)執(zhí)行結(jié)束時(shí)這些存儲單元自動被釋放。棧內(nèi)
存分配運(yùn)
算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請任
意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free
或delete釋放
內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。
5實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù);
答:雙向鏈表刪除一個(gè)節(jié)點(diǎn)P
template
<classtype>voidlist
::delnode(intp)
{
intk=l;
listnode
p=first;
while(p->next!=NULL
amp;
amp;k!=p)
p=p->next;
k++;
t=p->next;
cout
<
<
你已經(jīng)將數(shù)據(jù)項(xiàng)
#8220;
<
<t->data
<
<
刪除
<
<endl;
p->next=p->next->next;
length
9
deletet;
)
在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn):
template
<classtype>boollist
::insert(typet,intp)
listnode
*p;
p=first;
intk=l;
while(p!=NULL
amp;
amp;k
<P)
p=p->next;
k++;
if(p==NULL
amp;
amp;k!=p)
returnfalse;
else
listnode
*tp;
tp=newlistnode
tp->data=t;
tp->next=p->next;
p->next=tp;
length++;
returnue;
6寫一個(gè)函數(shù),將其中的\t都轉(zhuǎn)換成4個(gè)空格。
voidchange(char*ps)
while(*ps++!=
#8216;\0
#8242;)
if(*ps==
#8216;\t
#8217;)
7Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程
8如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函數(shù)?
9C++里面是不是所有的動作都是main()引起的?如果不是,請舉例.
答:在運(yùn)行C++程序時(shí),通常從main。函數(shù)開始執(zhí)行。因此如果沒有main。,程序?qū)?/p>
不完整,編譯器將指出未定義main()函數(shù)。
例外情況:如,在windows編程中,可以編寫一個(gè)動態(tài)連接庫(dll)模塊,這是其
他windows程序可以使用的代碼。由于
DLL模塊不是獨(dú)立的程序,因此不需要main().用于專用環(huán)境的程序
如機(jī)器人中的控制器芯片
可能不需要main().但常規(guī)的
獨(dú)立程序都需要main().
10C++里面如何聲明constvoidf(void)函數(shù)為C程序中的庫函數(shù)?
摩托羅拉部分C++面試題
一追雨制作
1.介紹一下STL,詳細(xì)說明STL如何實(shí)現(xiàn)vector。
2.如果用VC開發(fā)程序,常見這么兒個(gè)錯(cuò)誤
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年旅游管理實(shí)務(wù)試題目的地營銷與策劃策略
- 2026年旅游市場營銷策略與實(shí)踐試題目的地品牌建設(shè)與推廣
- 2026年市場營銷策略專業(yè)測試題目集
- 2026年電子商務(wù)運(yùn)營專業(yè)筆試模擬題
- 肺氣腫患者的疫苗接種建議
- 外資企業(yè)聯(lián)合年報(bào)培訓(xùn)
- 2026年寧波財(cái)經(jīng)學(xué)院單招綜合素質(zhì)筆試備考題庫含詳細(xì)答案解析
- 2026年寧夏財(cái)經(jīng)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年貴州工程職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題含詳細(xì)答案解析
- 2026年開封文化藝術(shù)職業(yè)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 山東省棗莊市薛城區(qū)2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試題
- 個(gè)人購房合同樣本大全
- 部編版道德與法治八年級上冊每課教學(xué)反思
- 電力配網(wǎng)工程各種材料重量表總
- 園林苗木的種實(shí)生產(chǎn)
- 【網(wǎng)絡(luò)謠言的治理路徑探析(含問卷)14000字(論文)】
- 2024年新安全生產(chǎn)法培訓(xùn)課件
- 卷閘門合同書
- 煤礦運(yùn)輸知識課件
- (全冊完整版)人教版五年級數(shù)學(xué)上冊100道口算題
- 人口信息查詢申請表(表格)
評論
0/150
提交評論