範文齋

位置:首頁 > 職場範文 > 面試

VC面試問題

面試1.88W

1. 函式呼叫的幾種形式:

VC面試問題

cdecl:c declare(C呼叫約定)的縮寫,是C和C++程式的預設呼叫方式,規則是,按從右至左的順序壓引數入棧,由呼叫者把引數彈出棧,對於傳送引數的記憶體棧是由呼叫者來維護的,正因為如此,只有這種呼叫方式可實現個數不定的入口引數(可變引數)。

stdcall:是pascal程式的預設呼叫方式,規則是,按從右至左的順序壓引數入棧,被呼叫的函式在返回前清理傳送引數的記憶體棧。

上兩者的主要區別是前者由呼叫者清理棧,後者由被呼叫的函清理棧。當然函式名的修飾部分也是不同的。

fastcall:採用暫存器傳遞引數,特點就是快了。

2.C++中用模板類的好處:

(1)可用來建立動態增長和減小的資料結構

(2)它是型別無關的,因此具有很高的.可複用性。

(3)它在編譯時而不是執行時檢查資料型別,保證了型別安全

(4)它是平臺無關的,可移植性

(5)可用於基本資料型別

Message和postMessage,GetMessage和peekMessage有什麼區別?

postMessage和SendMessage的區別主要是在於是否等待其他程式處理訊息,postMessage只是把訊息放入佇列,不管其他程式是否處理都返回,然後繼續執行,而SendMessage必須等待其他程式處理訊息後才返回,繼續執行。這兩個函式的返回值也不同,postMessage的返回值表示postMessage函式執行是否正確,而SendMessage的返回值表示其他程式處理訊息後的返回值。

peekMessage和GetMessage主要有以下區別:

essage將等到有合適的訊息時才返回,而peekMessage只是撇下一個訊息佇列。

2. GetMessage會將訊息從佇列中刪除,而peekMessage可以設定最後一個引數wRemoveMsg來決定是否將訊息保留在佇列中。

建立執行緒的方式有三種,MFC的AfxBeginThread,win32ApI的CreateThread和C RunTime的_beginthreadex.其中AfxBeginThread建立執行緒有建立工作者執行緒和UI執行緒之分。

itDialog,InitInstance,OnCreate在建立對話方塊中執行的先後順序。

答:InitInstance,OnCreate,OnInitDialog.執行順序從先到後。

5.談談C和C++的區別,你是如何理解面向物件思想的?

C和C++最大的區別是他們解決問題的思想是不一樣的,C是一個結構化語言,重點在於演算法和資料結構,對於C++考慮的是如何構造一個物件模型,使這個模型能配合對應的問題,通過獲取物件的狀態資訊得到輸出或實現過程控制。

面向物件是指人們認識客觀世界的思維方式,採用基於物件的概念去建立模型

6。Heap與stack的差別。

Heap是堆,stack是棧。

Stack的空間由操作系統自動分配/釋放,Heap上的空間手動分配/釋放。

Stack空間有限,Heap是很大的自由儲存區

C中的malloc函式分配的記憶體空間即在堆上,C++中對應的是new操作符。

程式在編譯期對變數和函式分配記憶體都在棧上進行,且程式執行過程中函式呼叫時引數的傳遞也在棧上進行

ows下的記憶體是如何管理的?

記憶體分配方式有三種:

1.從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數。

2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

3.從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。


標籤:VC 面試