freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c、c程序員常見面試題深入剖析-資料下載頁

2025-10-11 20:40本頁面
  

【正文】 []數(shù)組為函數(shù)內(nèi)的局部自動變量,在函數(shù)返回后,內(nèi)存已經(jīng)被釋放。這是許多程序員常犯的錯誤,其根源在于不理解變量的生存期。試題6的GetMemory避免了試題4的問題,傳入GetMemory的參數(shù)為字符串指針的指針,但是在GetMemory中執(zhí)行申請內(nèi)存及賦值語句*p =(char *)malloc(num)。后未判斷內(nèi)存是否申請成功,應(yīng)加上:if(*p == NULL){...//進(jìn)行申請內(nèi)存失敗處理 }試題7存在與試題6同樣的問題,在執(zhí)行char *str =(char *)malloc(100)。后未進(jìn)行內(nèi)存是否申請成功的判斷;另外,在free(str)后未置str為空,導(dǎo)致可能變成一個“野”指針,應(yīng)加上:str = NULL。試題6的Test函數(shù)中也未對malloc的內(nèi)存進(jìn)行釋放。剖析:試題4~7考查面試者對內(nèi)存操作的理解程度,基本功扎實的面試者一般都能正確的回答其中50~60的錯誤。但是要完全解答正確,卻也絕非易事。對內(nèi)存操作的考查主要集中在:(1)指針的理解;(2)變量的生存期及作用范圍;(3)良好的動態(tài)內(nèi)存申請和釋放習(xí)慣。再看看下面的一段程序有什么錯誤:swap(int* p1,int* p2){ int *p。*p = *p1。*p1 = *p2。*p2 = *p。}在swap函數(shù)中,p是一個“野”指針,有可能指向系統(tǒng)區(qū),導(dǎo)致程序運行的崩潰。在VC++中DEBUG運行時提示錯誤“Access Violation”。該程序應(yīng)該改為:swap(int* p1,int* p2){ Char *p。*p = *p1。*p1 = *p2。*p2 = *p。} 試題1:分別給出BOOL,int,float,指針變量 與“零值”比較的 if 語句(假設(shè)變量名為var)解答:BOOL型變量:if(!var)int型變量: if(var==0)float型變量:const float EPSINON = 。if((x =steps。char tmp[MAX_LEN]。strcpy(tmp, pStr + n)。strcpy(tmp + steps, pStr)。*(tmp + strlen(pStr))= 39。39。strcpy(pStr, tmp)。}正確解答2:void LoopMove(char *pStr, int steps){ int n = strlen(pStr)steps。char tmp[MAX_LEN]。memcpy(tmp, pStr + n, steps)。memcpy(pStr + steps, pStr, n)。memcpy(pStr, tmp, steps)。}剖析:這個試題主要考查面試者對標(biāo)準(zhǔn)庫函數(shù)的熟練程度,在需要的時候引用庫函數(shù)可以很大程度上簡化程序編寫的工作量。最頻繁被使用的庫函數(shù)包括:(1)strcpy(2)memcpy(3)memset試題6:已知WAV文件格式如下表,打開一個WAV文件,以適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)組織WAV文件頭并解析WAV格式的各項信息。WAVE文件格式說明表偏移地址 字節(jié)數(shù) 數(shù)據(jù)類型 內(nèi) 容 文件頭 00H 4 Char “RIFF”標(biāo)志04H 4 int32 文件長度08H 4 Char “WAVE”標(biāo)志0CH 4 Char “fmt”標(biāo)志10H 4 ? 過渡字節(jié)(不定)14H 2 int16 格式類別16H 2 int16 通道數(shù)18H 2 int16 采樣率(每秒樣本數(shù)),表示每個通道的播放速度1CH 4 int32 波形音頻數(shù)據(jù)傳送速率20H 2 int16 數(shù)據(jù)塊的調(diào)整數(shù)(按字節(jié)算的)22H 2 ? 每樣本的數(shù)據(jù)位數(shù)24H 4 Char 數(shù)據(jù)標(biāo)記符"data"28H 4 int32 語音數(shù)據(jù)的長度解答:將WAV文件格式定義為結(jié)構(gòu)體WAVEFORMAT:typedef struct tagWaveFormat { char cRiffFlag[4]。UIN32 nFileLen。char cWaveFlag[4]。char cFmtFlag[4]。char cTransition[4]。UIN16 nFormatTag。UIN16 nChannels。UIN16 nSamplesPerSec。UIN32 nAvgBytesperSec。UIN16 nBlockAlign。UIN16 nBitNumPerSample。char cDataFlag[4]。UIN16 nAudioLength。} WAVEFORMAT。假設(shè)WAV文件內(nèi)容讀出后存放在指針buffer開始的內(nèi)存單元內(nèi),則分析文件格式的代碼很簡單,為:WAVEFORMAT waveFormat。memcpy(amp。waveFormat, buffer,sizeof(WAVEFORMAT))。直接通過訪問waveFormat的成員,就可以獲得特定WAV文件的各項格式信息。剖析:試題6考查面試者組織數(shù)據(jù)結(jié)構(gòu)的能力,有經(jīng)驗的程序設(shè)計者將屬于一個整體的數(shù)據(jù)成員組織為一個結(jié)構(gòu)體,利用指針類型轉(zhuǎn)換,可以將memcpy、memset等函數(shù)直接用于結(jié)構(gòu)體地址,進(jìn)行結(jié)構(gòu)體的整體操作。透過這個題可以看出面試者的程序設(shè)計經(jīng)驗是否豐富。試題7:編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù),已知類String的原型為:class String { public:String(const char *str = NULL)。// 普通構(gòu)造函數(shù)String(const String amp。other)。// 拷貝構(gòu)造函數(shù)~ String(void)。// 析構(gòu)函數(shù)String amp。 operate =(const String amp。other)。// 賦值函數(shù)private:char *m_data。// 用于保存字符串 }。解答://普通構(gòu)造函數(shù)String::String(const char *str){ if(str==NULL){m_data = new char[1]。// 得分點:對空字符串自動申請存放結(jié)束標(biāo)志39。39。的空//加分點:對m_data加NULL 判斷*m_data = 39。39。} else {int length = strlen(str)。m_data = new char[length+1]。// 若能加 NULL 判斷則更好strcpy(m_data, str)。} }// String的析構(gòu)函數(shù)String::~String(void){ delete [] m_data。// 或delete m_data。}//拷貝構(gòu)造函數(shù)String::String(const String amp。other)// 得分點:輸入?yún)?shù)為const型 { int length = strlen()。m_data = new char[length+1]。//加分點:對m_data加NULL 判斷strcpy(m_data, )。}//賦值函數(shù)String amp。 String::operate =(const String amp。other)// 得分點:輸入?yún)?shù)為const型 { if(this == amp。other)//得分點:檢查自賦值return *this。delete [] m_data。//得分點:釋放原有的內(nèi)存資源int length = strlen()。m_data = new char[length+1]。//加分點:對m_data加NULL 判斷strcpy(m_data, )。return *this。//得分點:返回本對象的引用 }剖析:能夠準(zhǔn)確無誤地編寫出String類的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、賦值函數(shù)和析構(gòu)函數(shù)的面試者至少已經(jīng)具備了C++基本功的60%以上!在這個類中包括了指針類成員變量m_data,當(dāng)類中包括指針類成員變量時,一定要重載其拷貝構(gòu)造函數(shù)、賦值函數(shù)和析構(gòu)函數(shù),這既是對C++程序員的基本要求,也是《Effective C++》中特別強(qiáng)調(diào)的條款。仔細(xì)學(xué)習(xí)這個類,特別注意加注釋的得分點和加分點的意義,這樣就具備了60%以上的C++基本功!試題8:請說出static和const關(guān)鍵字盡可能多的作用解答:static關(guān)鍵字至少有下列n個作用:(1)函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時仍維持上次的值;(2)在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;(3)在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);(4)在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;(5)在類中的static成員函數(shù)屬于整個類所擁有,這個函數(shù)不接收this指針,因而只能訪問類的static成員變量。const關(guān)鍵字至少有下列n個作用:(1)欲阻止一個變量被改變,可以使用const關(guān)鍵字。在定義該const變量時,通常需要對它進(jìn)行初始化,因為以后就沒有機(jī)會再去改變它了;(2)對指針來說,可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時指定為const;(3)在一個函數(shù)聲明中,const可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;(4)對于類的成員函數(shù),若指定其為const類型,則表明其是一個常函數(shù),不能修改類的成員變量;(5)對于類的成員函數(shù),有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。例如:const classA operator*(const classAamp。 a1,const classAamp。 a2)。operator*的返回結(jié)果必須是一個const對象。如果不是,這樣的變態(tài)代碼也不會編譯出錯:classA a, b, c。(a * b)= c。// 對a*b的結(jié)果賦值操作(a * b)= c顯然不符合編程者的初衷,也沒有任何意義。剖析:驚訝嗎?小小的static和const居然有這么多功能,我們能回答幾個?如果只能回答1~2個,那還真得閉關(guān)再好好修煉修煉。這個題可以考查面試者對程序設(shè)計知識的掌握程度是初級、中級還是比較深入,沒有一定的知識廣度和深度,不可能對這個問題給出全面的解答。大多數(shù)人只能回答出static和const關(guān)鍵字的部分功能。試題1:請寫一個C函數(shù),若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1解答:int checkCPU(){ {union w{int a。char b。} c。 = 1。return( == 1)。} }剖析:嵌入式系統(tǒng)開發(fā)者應(yīng)該對Littleendian和Bigendian模式非常了解。采用Littleendian模式的CPU對操作數(shù)的存放方式是從低字節(jié)到高字節(jié),而Bigendian模式對操作數(shù)的存放方式是從高字節(jié)到低字節(jié)。例如,16bit寬的數(shù)0x1234在Littleendian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:內(nèi)存地址 存放內(nèi)容 0x4000 0x34 0x4001 0x12而在Bigendian模式CPU內(nèi)存中的存放方式則為:內(nèi)存地址 存放內(nèi)容 0x4000 0x12 0x4001 0x3432bit寬的數(shù)0x12345678在Littleendian模式CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:內(nèi)存地址 存放內(nèi)容 0x4000 0x78 0x4001 0x56 0x4002 0x34 0x4003 0x12而在Bigendian模式CPU內(nèi)存中的存放方式則為:內(nèi)存地址 存放內(nèi)容 0x4000 0x12 0x4001 0x34 0x4002 0x56 0x4003 0x78聯(lián)合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕松地獲得了CPU對內(nèi)存采用Littleendian還是Bigendian模式讀寫。如果誰能當(dāng)場給出這個解答,那簡直就是一個天才的程序員。試題2:寫一個函數(shù)返回1+2+3+?+n的值(假定結(jié)果不會超過長整型變量的范圍)解答:int Sum(int n){ return((long)1 + n)* n / 2。//或return(1l + n)* n / 2。}剖析:對于這個題,只能說,也許最簡單的答案就是最好的答案。下面的解答,或者基于下面的解答思路去優(yōu)化,不管怎么“折騰”,其效率也不可能與直接return(1 l + n)* n / 2相比!int Sum(int n){ long sum = 0。for(int i=1。isum += i。} return sum。}所以程序員們需要敏感地將數(shù)學(xué)等知識用在程序設(shè)計中。
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1