C面試題 伺服器程式設計 網路程式設計方便

2021-05-23 02:12:19 字數 4127 閱讀 8678

5.資料型別隱式轉換

短資料->長資料 (eg: float -> double)

有符號->無符號 (eg: int -> unsigned int )ps: 所以 int(-1)>unsigned int(1);

低精度->高精度 (eg: int -> float)

6.memcpy 有「防重疊」覆蓋機制,strcpy 沒有。

7.float表示

共計32位,折合4位元組

由最高到最低位分別是第31、30、29、……、0位

31位是符號位,1表示該數為負,0反之。

30-23位,一共8位是指數字。

22-0位,一共23位是尾數字。

每 8位分為一組,分成4組,分別是a組、b組、c組、d組。

每一組是乙個位元組,在記憶體中逆序儲存,即:dcba

8.不能在類的宣告中初始化類常量,而只能在建構函式初始化列表來初始化

9.類中的列舉常量不占用物件的儲存空間

10.有時候函式原本不需要返回值,但為了增加靈活性如支援鏈式表達,可以附加返回值。

11.賦值函式,應當用「引用傳遞」的方式返回string 物件。如果用「值傳遞」的方式,雖然功能仍然正確,但由於return 語句要把 *this 拷貝到儲存返回值的外部儲存單元之中,增加了不必要的開銷,降低了賦值函式的效率。

12.對於非內部資料型別的物件而言,光用maloc/free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式, 物件在消亡之前要自動執行析構函式。

如果用free 釋放「new 建立的動態物件」,那麼該物件因無法執行析構函式而可能導致程式出錯。如果用delete 釋放「malloc 申請的動態記憶體」,理論上講程式不會出錯,但是該程式的可讀性很差。

13.如果用new 建立物件陣列,那麼只能使用物件的無引數建構函式,delete時如果物件沒有析構函式,則delete和delete是功能相同的。

14.只能靠引數而不能靠返回值型別的不同來區分過載函式。編譯器根據引數為每個過載函式產生不同的內部識別符號。

並不是兩個函式的名字相同就能構成過載。全域性函式和類的成員函式同名不算過載,因為函式的作用域不同。

15.關鍵字inline

必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。定義在類宣告之中的成員函式將自動地成為內聯函式。

以下情況不宜使用內聯:

(1)如果函式體內的**比較長,使用內聯將導致記憶體消耗代價較高。

(2)如果函式體內出現迴圈,那麼執行函式體內**的時間要比函式呼叫的開銷大。

16.只有靜態常量整型資料成員才可以在類中初始化,普通成員只能在初始化列表或函式內初始化,常量成員只能在初始化列表。成員物件初始化的次序完全不受它們在初始化表中次序的影響,只由成員物件在類中宣告的次序決定。

17.拷貝建構函式和賦值函式非常容易混淆,常導致錯寫、錯用。拷貝建構函式是在物件被建立時呼叫的,而賦值函式只能被已經存在了的物件呼叫。

18.不想編寫拷貝建構函式和賦值函式,又不允許別人使用編譯器生成的,則只需將拷貝建構函式和賦值函式宣告為私有函式,不用編寫**。

19.「const t」和「t const」總是都被允許的,而且是等效的。

注意在常量指標(const pointer)中,「const」永遠出現在「*」之後。

例如:int *const p1 = q; //指向int 變數的常量指標

int const* p2 = q; //指向int 常量的指標

const int* p3 = q; //指向int 常量的指標

20.乙個常見的微妙問題是,乙個函式風格的巨集並不遵守函式引數傳遞的規則。

21.沒有引用陣列,但可有指向陣列的引用,並且保留陣列的邊界。

22.左值擁有儲存值的位置,而右值則沒有相關位址,只是簡單值。

23.負索引是可以的,如p[-2]或(-2)[p]都是可以的(p必然不能是陣列名),但必須保持不越界。

sum=p()+q()+r();不能保證p(),q(),r()呼叫的順序。

逗號運算子","可以保證求值順序.result= ( p(),q(),r() );是先求p(),q(),然後將r()賦給result

24.在if的條件裡宣告變數,且可在真假分支裡面使用。

const int * const * p;p是個指標,指向常指標的,常指標指向乙個常量int。

25.不能用空白初始化列表來規定預設的物件初始化.

class a;

a a(); //會警告,看起來像函式宣告

a *p=new a(); //ok

a *p=new a; //ok

26.可以寫一句只有數字的**,如1234;(void)0;可以編譯執行,相當於nop。

27.給函式指標賦值時可以對函式名取位址也可以不取,通過函式指標呼叫函式時可以用*也可不用。

28.static_cast可以轉換基本資料型別(int->char)、void*和有型別指標、基類和派生類指標的轉換(多重繼承也行,它可重新計算偏移位址),但是不能轉換如(int*->char*等)。

29.dynamic_cast主要用於執行"安全的向下轉型",reinterpret_cast可執行任何轉換,const_cast執行去 const轉換。

30.將取位址運算子用到完全限定的類成員名(包括變數和函式),就能獲得指向成員的位址。使用形式為"x::

*"來宣告乙個指向類x成員的指標。注意宣告成員函式指標的時候不能像普通函式指標可以省略&或*的使用,但靜態成員函式則除外,它和普通函式一致。成員指標和普通指標不一樣,並非指向乙個記憶體區域,而是相當於乙個結構的偏移量,當它和具體的物件結合就能指向特定物件的特定成員。

31.當把派生類物件賦給基類物件的時候會產生切割現象,即針對派生類的資料和行為將產生切割。

32.多維陣列的第1個元素是陣列而非普通型別。

33.在含有單引數建構函式的類中注意隱式轉換。如string s="hello";

34.函式物件是過載函式呼叫運算子的類物件。

35.引用需要用左值進行初始化,但指向常量的引用除外,編譯器將建立乙個臨時左值。如const int c=12;//ok 一般情況下編譯器產生的臨時物件的生命期在它所在的最大表示式範圍內,但用臨時物件初始化常量物件的引用時會讓編譯器保證臨時物件和引用生命週期一樣。

36.可以將基類的成員指標(變數或函式)安全的轉換為指向派生類成員的指標,但反之則不安全。

37.函式引數的傳遞是採用拷貝建構函式而非賦值操作。對未初始化的物件賦值可能會出現意外,如類中含有未初始化指標。

38.宣告但不定義私有的拷貝構造和賦值運算將會關閉類的複製操作。並且賦值運算、拷貝建構函式和析構函式不會被繼承,對派生類過載賦值運算時需要呼叫基類的賦值運算。

39.在建構函式裡對成員變數初始化,比較好的方式是使用初始化列表。在初始化列表中靜態成員和陣列不能被初始化。

類的初始化順序是虛擬基類的成員->非虛基類成員->類自身成員,和初始化列表的順序無關。

含有虛擬基類和不含的類在成員布局上不一樣,含有虛擬基類的類將虛擬基類的資料放在最後面。另外如b:virtual a,c:

virtual a,d:b,c;(均是虛繼承)則d的建構函式將對a初始化一次(即使在初始化列表沒有顯式初始化a),b,c將不再對a初始化。

所有靜態資料(全域性變數和靜態儲存變數)在使用前如未初始化其值都為0.全域性變數可以儲存在靜態初始化區和未初始化區。

40.rvo返回值優化,是指在函式返回中執行拷貝初始化到直接初始化(使用帶非物件引數的建構函式)的轉換,nrv和rvo類似,但使用命名區域性變數來儲存返回值。p160

41.過載、覆蓋和隱藏的區別

過載的特徵:在同乙個類,函式名相同,引數不同,virtual可有可無。

覆蓋的特徵:在兩個類(基類和派生類),函式名和引數都相同, 且必須有virtual關鍵字。

隱藏的特徵:基類函式名和派生類函式名相同引數不同,且不管是否有關鍵字。或函式名、引數均相同,但基類函式沒有virtual(有的話就是覆蓋)。

不能覆蓋而只能隱藏基類非虛函式。

42.相同型別的所有物件公用乙個虛函式表,在單繼承下不管有多少個虛函式都只有乙個虛函式表指標。覆蓋就是在為派生類構造虛函式表時用派生類的函式位址替換基類成員函式位址的過程。

43.使用常量類成員可能在對類物件賦值的時候產生問題。

44.有時候我們可能會看到 if (null == p) 這樣古怪的格式。不是程式寫錯了,是程式設計師為了防止將 if (p == null) 誤寫成 if (p = null),而有意把p 和null 顛倒。

C 面試題 C 基礎程式設計題

case 8 cout auguest break case 9 cout september break case 10 cout october break case 11 cout november break case 12 cout december break cout 29.22.程式...

c c 程式設計面試題

c c 程式設計面試題07 c語言 c 程式設計面試題集錦 第七部分 1.介紹一下stl,詳細說明stl如何實現vector.answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序...

視覺化程式設計 Visual C程式設計 考查面試題

視覺化程式設計 visual c 程式設計 考查面試題一 概念題 30分 1 windows程式設計 2 事件驅動 3 事件與訊息 4 專案 5 api 6 動態鏈結 7 視窗 8 模態對話方塊與無模態對話方塊 9 控制項 10 dc 11 視覺化程式設計 12 資源 13 控制代碼與id 14 g...