面試題35:typedef和define有什麼區別
(1)用法不同:typedef用來定義一種資料型別的別名,增強程式的可讀性。define主要用來定義常量,以及書寫複雜使用頻繁的巨集。
(2)執行時間不同:typedef是編譯過程的一部分,有型別檢查的功能。define是巨集定義,是預編譯的部分,其發生在編譯之前,只是簡單的進行字串的替換,不進行型別的檢查。
(3)作用域不同:typedef有作用域限定。define不受作用域約束,只要是在define宣告後的引用都是正確的。
(4)對指標的操作不同:typedef和define定義的指標時有很大的區別。
注意:typedef定義是語句,因為句尾要加上分號。而define不是語句,千萬不能在句尾加分號。
22面試題36:關鍵字const是什麼
const用來定義乙個唯讀的變數或物件。主要優點:便於型別檢查、同巨集定義一樣可以方便地進行引數的修改和調整、節省空間,避免不必要的記憶體分配、可為函式過載提供參考。
說明:const修飾函式引數,是一種程式設計規範的要求,便於閱讀,一看即知這個引數不能被改變,實現時不易出錯。
面試題37:static有什麼作用
static在c中主要用於定義全域性靜態變數、定義區域性靜態變數、定義靜態函式。在c++中新增了兩種作用:定義靜態資料成員、靜態函式成員。
注意:因為static定義的變數分配在靜態區,所以其定義的變數的預設值為0,普通變數的預設值為隨機數,在定義指標變數時要特別注意。
面試題38:extern有什麼作用
extern標識的變數或者函式宣告其定義在別的檔案中,提示編譯器遇到此變數和函式時在其它模組中尋找其定義。
面試題39:流操作符過載為什麼返回引用
在程式中,流操作符》和《經常連續使用。因此這兩個操作符的返回值應該是乙個仍舊支援這兩個操作符的流引用。其他的資料型別都無法做到這一點。
注意:除了在賦值操作符和流操作符之外的其他的一些操作符中,如+、-、*、/等卻千萬不能返回引用。因為這四個操作符的物件都是右值,因此,它們必須構造乙個物件作為返回值。
面試題40:簡述指標常量與常量指標區別
指標常量是指定義了乙個指標,這個指標的值只能在定義時初始化,其他地方不能改變。常量指標是指定義了乙個指標,這個指標指向乙個唯讀的物件,不能通過常量指標來改變這個物件的值。
指標常量強調的是指標的不可改變性,而常量指標強調的是指針對其所指物件的不可改變性。
注意:無論是指標常量還是常量指標,其最大的用途就是作為函式的形式引數,保證實參在被呼叫函式中的不可改變特性。
面試題41:陣列名和指標的區別
請寫出以下**的列印結果: #include #include void main(void)
while(*p++ != 『\0′) //計算數字串度
p = str;
if(p[0] == 『-』) //判斷陣列是否有負號 char temp = 』0′; for(int i = 0 ; i < n; i++) if(num !=0 || temp != 』0′) //濾除字串開始的0字元 } if(isnegative) //如果字串中有負號,將數值取反 else }
注意:此段**只是實現了十進位制字串到數字的轉化,讀者可以自己去實現2進製,8進製,10進製,16進製制的轉化。
面試題45:簡述strcpy、sprintf與memcpy的區別
三者主要有以下不同之處:
(1)操作物件不同,strcpy的兩個操作物件均為字串,sprintf的操作源物件可以是多種資料型別,
25目的操作物件是字串,memcpy 的兩個物件就是兩個任意可操作的記憶體位址,並不限於何種資料型別。
(2)執行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。
(3)實現功能不同,strcpy主要實現字串變數間的拷貝,sprintf主要實現其他資料型別格式到字串的轉化,memcpy主要是記憶體塊間的拷貝。
說明:strcpy、sprintf與memcpy都可以實現拷貝的功能,但是針對的物件不同,根據實際需求,來選擇合適的函式實現拷貝功能。
面試題46:用c編寫乙個死迴圈程式 while(1)
說明:很多種途徑都可實現同一種功能,但是不同的方法時間和空間占用度不同,特別是對於嵌入式軟體,處理器速度比較慢,儲存空間較小,所以時間和空間優勢是選擇各種方法的首要考慮條件。
面試題47:編碼實現某一變數某位清0或置1
給定乙個整型變數a,寫兩段**,第乙個設定a的bit 3,第二個清a的bit 3,在以上兩個操作中,要保持其他位不變。
【答案】 #define bit3 (0×1 << 3 ) satic int a;
設定a的bit 3: void set_bit3( void )
清a的bit 3 void set_bit3( void )
說明:在置或清變數或暫存器的某一位時,一定要注意不要影響其他位。所以用加減法是很難實現的。26}
【答案】
這段中斷服務程式主要有以下四個問題:
(1)isr 不能返回乙個值。
(2)isr 不能傳遞引數。
(3)在isr 中做浮點運算是不明智的。
(4)printf()經常有重入和效能上的問題。
注意:本題的第三個和第四個問題雖不是考察的重點,但是如果能提到這兩點可給面試官留下乙個好印象。
面試題49:建構函式能否為虛函式
建構函式不能是虛函式。而且不能在建構函式中呼叫虛函式,因為那樣實際執行的是父類的對應函式,因為自己還沒有構造好。析構函式可以是虛函式,而且,在乙個複雜類結構中,這往往是必須的。析構函式也可以是純虛函式,但純虛析構函式必須有定義體,因為析構函式的呼叫是在子類中隱含的。
說明:虛函式的動態繫結特性是實現過載的關鍵技術,動態繫結根據實際的呼叫情況查詢相應類的虛函式表,呼叫相應的虛函式。
面試題50:談談你對物件導向的認識
物件導向可以理解成對待每乙個問題,都是首先要確定這個問題由幾個部分組成,而每乙個部分其實就是乙個物件。然後再分別設計這些物件,最後得到整個程式。傳統的程式設計多是基於功能的思想來進行考慮和設計的,而物件導向的程式設計則是基於物件的角度來考慮問題。這樣做能夠使得程式更加的簡潔清晰。
說明:程式設計中接觸最多的「物件導向程式設計技術」僅僅是物件導向技術中的乙個組成部分。發揮物件導向技術的優勢是乙個綜合的技術問題,不僅需要物件導向的分析,設計和程式設計技術,而且需要借助必要的建模和開發工具。
面試題精選 微軟試題
微軟試題 1 直線飛行 一架飛機載滿油飛行距離為1,n架飛機最遠能飛多遠?就是不是兜圈沒有迎頭接應的情況,這問題就是n架飛機能飛多遠?存在的極值問題是不要重複飛行,比如兩架飛機同時給一架飛機加油同 時飛回來即可認為是重複,或者換句話說就是離出發點越遠在飛的飛機 就越少,這個極值條件是顯然的,因為n架...
C 面試題精選
1 執行如下的c 輸出是什麼?class a class b public a int main 答案 輸出b fun with number 10。由於a是乙個指向b例項的引用,因此在執行的時候會呼叫b fun。但預設引數是在編譯期決定的。在編譯的時候,編譯器只知道a是乙個型別a的引用,具體指向什...
Mysql精選面試題
一.索引 1.索引是什麼 索引是對資料庫中一或多個列值的排序,幫助資料庫高效獲取資料的資料結構 假如我們用模擬的方法,資料庫中的索引就相當於書籍中的目錄一樣,當我們想找到書中的摸個知識點,我們可以直接去目錄中找而不是在書中每頁的找,但是這也丟擲了索引的乙個缺點,在對資料庫修改的時候要修改索引到導致時...