牛客網 C 面試寶典 基礎知識(3)

2021-10-05 09:35:01 字數 2588 閱讀 1232

● 如果同時定義了兩個函式,乙個帶const,乙個不帶,會有問題嗎?

不會,這相當於函式的過載。

● 請你來說一說隱式型別轉換參考

對於內建型別,低精度的變數給高精度變數賦值會發生隱式型別轉換

可以用單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換。

● 說說你了解的型別轉換

const_cast:去除const引用物件的const

static_cast:完成基礎資料型別;同乙個繼承體系中型別的轉換;任意型別與空指標型別void* 之間的轉換。

dynamic_cast:用於存在虛函式的父子關係的強制型別轉換

reinterpret_cast:可以用於任意型別的指標之間的轉換

● 請你來說一說c++函式棧空間的最大值

預設是1m,不過可以調整

● 請你來說一說extern「c」參考

extern "c"的主要作用就是為了能夠正確實現c++**呼叫其他c語言**。加上extern "c"後,會指示編譯器這部分**按c語言(而不是c++)的方式進行編譯。

為了更好的支援原來的c**和已經寫好的c語言庫,需要在c++中盡可能的支援c,而extern "c"就是其中的乙個策略。

由於cpp支援多型性,也就是具有相同函式名的函式可以完成不同的功能,cpp通常是通過引數區分具體呼叫的是哪乙個函式。在編譯的時候,cpp編譯器會將引數型別和函式名連線在一起

但是在c語言中,由於完全沒有多型性的概念。由於這種的原因,當採用cpp與c混合程式設計的時候,就可能會出問題。

● 請你回答一下new/delete與malloc/free的區別是什麼

考 1.malloc/free是c語言的庫函式,new/delete是c++的操作符

2.malloc開闢空間大小需手動計算,new是由編譯器自己計算

3.malloc返回型別為void*,必須強制型別轉換對應型別指標,new則直接返回對應型別指標;

4.無論釋放幾個空間大小,free只傳遞指標,多個物件時delete需加

●請你說說你了解的rtti

rtti是」runtime type information」的縮寫,意思是執行時型別資訊,它提供了執行時確定物件型別的方法。

在c++層面主要體現在dynamic_cast和typeid

對於存在虛函式的型別,typeid和dynamic_cast都會去查詢type_info

● 請你說說虛函式表具體是怎樣實現執行時多型的?

子類若重寫父類虛函式,虛函式表中,該函式的位址會被替換

● 請你說說c語言是怎麼進行函式呼叫的?

每乙個函式呼叫都會分配函式棧,在棧內進行函式執行過程。

呼叫前,先把返回位址壓棧,然後把當前函式的esp指標壓棧。

● 請你說說c語言引數壓棧順序?

從右到左

● 請你說說c++如何處理返回值?

生成乙個臨時變數,把它的引用作為函式引數傳入函式內。

——函式返回值存入記憶體單元,呼叫程式訪問該記憶體單元,獲得返回值

可以把引用作為返回值,要注意被引用的物件不能超出作用域。可以返回乙個對靜態變數的引用。

● 請你回答一下c++中拷貝賦值函式的形參能否進行值傳遞?

值傳遞是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。

不能。如果是這種情況下,呼叫拷貝建構函式的時候,首先要將實參傳遞給形參,這個傳遞的時候又要呼叫拷貝建構函式。。如此迴圈,無法完成拷貝,棧也會滿。

● 請你回答一下malloc與new區別

malloc需要給定申請記憶體的大小,返回的指標需要強轉。

new會呼叫建構函式,不用指定記憶體大小,返回的指標不用強轉。

● 請你說一說select

。。。這個不懂,有待學習

● 請你說說fork,wait,exec函式

父程序產生子程序使用fork拷貝出來乙個父程序的副本,此時只拷貝了父程序的頁表,兩個程序都讀同一塊記憶體

exec函式可以載入乙個elf檔案去替換父程序,從此父程序和子程序就可以執行不同的程式了。

父程序一旦呼叫了wait就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出

● 請你回答一下靜態函式和虛函式的區別

靜態函式在編譯的時候就已經確定執行時機,虛函式在執行的時候動態繫結。

虛函式因為用了虛函式表機制,呼叫的時候會增加一次記憶體開銷

● 請你說一說過載和覆蓋

過載:兩個函式名相同,但是引數列表不同(個數,型別),返回值型別沒有要求,在同一作用域中

重寫:子類繼承了父類,父類中的函式是虛函式,在子類中重新定義了這個虛函式,這種情況是重寫

牛客網 C 面試寶典 基礎知識(4)容器和演算法

感覺牛客網的整理有丟丟凌亂 請你來說一下map和set有什麼區別,分別又是怎麼實現的?map和set都是c 的關聯容器,其底層實現都是紅黑樹 rb tree map和set區別在於 2 set的迭代器是const的,不允許修改元素的值 map允許修改value,但不允許修改key。其原因是因為map...

C 面試寶典 C 基礎知識

1.c 和c的區別 設計思想上 c 是物件導向的語言,而c是面向過程的結構化程式設計語言 語法上 c 具有封裝 繼承 多型三種特性 c 相比於c,增加多許多態別安全的功能,比如強制轉換 c 支援正規化,比如模板類 函式模板等 2.野指標是什麼?3.說一下static關鍵字的作用?1.全域性靜態變數 ...

牛客網 C 面試寶典 作業系統(2)

1 互斥鎖和讀寫鎖區別 互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒。讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執...