經(jīng)典c++面試題五_第1頁
經(jīng)典c++面試題五_第2頁
經(jīng)典c++面試題五_第3頁
經(jīng)典c++面試題五_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

經(jīng)典c++面試題五

46)位域:

有些信息在存儲時(shí),并不需要占用一個(gè)完整的字節(jié),而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(guān)量時(shí),只有0和1兩種狀態(tài),用一位二進(jìn)位即可。為了節(jié)約存儲空間,并使處理簡便,C語言又供應(yīng)了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所謂“位域”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。這樣就可以把幾個(gè)不同的對象用一個(gè)字節(jié)的二進(jìn)制位域來表示。一、位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:

struct位域結(jié)構(gòu)名{位域列表};其中位域列表的形式為:類型說明符位域名:位域長度

例如:

structbs

{

inta:8;

intb:2;

intc:6;

};

位域變量的說明與結(jié)構(gòu)變量說明的方式相同??刹杉{先定義后說明,同時(shí)定義說明或者直接說明這三種方式。例如:

structbs

{

inta:8;

intb:2;

intc:6;

}data;

說明data為bs變量,共占兩個(gè)字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。對于位域的定義尚有以下幾點(diǎn)說明:

一個(gè)位域必需存儲在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位域時(shí),應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開頭。例如:

structbs

{

unsigneda:4

unsigned:0

unsignedb:4

unsignedc:4

}

在這個(gè)位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從其次字節(jié)開頭,占用4位,c占用4位。

由于位域不允許跨兩個(gè)字節(jié),因此位域的長度不能大于一個(gè)字節(jié)的長度,也就是說不能超過8位二進(jìn)位。

位域可以無位域名,這時(shí)它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如:

structk

{

inta:1

int:2

intb:3

intc:2

};

從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型,不過其成員是按二進(jìn)位安排的。

位域的使用位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為:位域變量名?位域名位域允許用各種格式輸出。

main()

{

structbs

{

unsigneda:1;

unsignedb:3;

unsignedc:4;

}

bit,*pbit;

bit.a=1;

bit.b=7;

bit.c=15;

pri

47)改錯(cuò):

#include

intmain(void)

{

int**p;

intarr;

p=

return0;

}

解答:搞錯(cuò)了,是指針類型不同,int**p;//二級指針//得到的是指向第一維為100的數(shù)組的指針

#include

intmain(void)

{

int**p,*q;

intarr;

q=arr;

p=

return0;

}

48)下面這個(gè)程序執(zhí)行后會有什么錯(cuò)誤或者效果:

#defineMAX255

intmain()

{

unsignedcharA,i;//i被定義為unsignedchar

for(i=0;imaxnumber)

{

sec_max=maxnumber;

maxnumber=data;

}

else

{

if(data>sec_max)

sec_max=data;

}

}

returnsec_max;

}

43.寫一個(gè)在一個(gè)字符串(n)中查找一個(gè)子串(m)第一個(gè)位置的函數(shù)。

KMP算法效率最好,時(shí)間簡單度是O(n+m)。

44.多重繼承的內(nèi)存安排問題:

比如有classA:publicclassB,publicclassC{}

那么A的內(nèi)存結(jié)構(gòu)大致是怎么樣的?

這個(gè)是piler-dependent的,不同的實(shí)現(xiàn)其細(xì)節(jié)可能不同。

假如不考慮有虛函數(shù)、虛繼承的話就相當(dāng)簡潔;否則的話,相當(dāng)簡單。

45.如何推斷一個(gè)單鏈表是有環(huán)的?(留意不能用標(biāo)志位,最多只能用兩個(gè)額外指針)

structnode{charval;node*next;}

boolcheck(constnode*head){}//returnfalse:無環(huán);true:有環(huán)

一種O(n)的方法就是(搞兩個(gè)指針,一個(gè)每次遞增一步,一個(gè)每次遞增兩步,假如有環(huán)的話兩者必定重合,反之亦然):

boolcheck(constnode*head)

{

if(head==NULL)returnfalse;

node*l

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論