50個C面試題

2021-08-02 02:11:19 字數 2834 閱讀 3101

(1)變數的定義和宣告有什麼區別

為變數分配位址和儲存空間的叫做變數的定義,不分配位址的成為宣告。乙個變數可以在多個地方宣告,但是只能在乙個地方定義。加入了extern修飾的變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。

說明:很多時候乙個變數,只是宣告不分配記憶體空間,知道具體使用時才初始化,分配記憶體空間,如外部變數。

(2)寫出bool、int、float、指標變數與「零值」比較的if語句

(3)sizeof 和strlen有以下區別

1.sizeof是乙個操作符,strlen是庫函式。

2.sizeof的引數可以是資料型別,也可以是變數,而strlen只能以結尾為'/0'的字串作引數。

3.編譯器在編譯時就計算出了sizeof的結果。而strlen函式必須在執行時才能計算出來。而且sizeof計算的資料型別佔記憶體大小,而strlen計算的是字串的實際長度。

4.陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。

在c中static用來修飾區域性靜態變數和外部靜態變數、函式。

而c++除了上述功能外,還用來定義類的資料成員和成員函式。即靜態成員和靜態成員函式。

《靜態變數的理解:靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區,在靜態儲存區內分配儲存單元,該區域中的資料在整個程式的執行期間一直占用這些儲存空間,在程式整個執行期間都不釋放(相反動態儲存空間的話,函式呼叫結束後即釋放)。靜態變數雖在程式的整個執行過程中十種存在,但是她作用域之外不能使用。

>

(5)c++中的new與c中的malloc有什麼區別

malloc與new 有一下區別:

1;new 和delete是操作符,可以過載,只能在c++中使用;

2;malloc和free是函式,可以覆蓋,c,c++中都可以使用;

3;new可以呼叫物件的建構函式,對應的delete呼叫相應的析構函式;

4;malloc僅僅分配記憶體,free只是**記憶體,並不執行構造和析構函式;

5;new、delete返回的是某種資料型別指標,而malloc、free返回的是void指標;

(6)寫乙個標準的巨集min

#define min(a,b) ((a<=b)?:a,b)

(7)乙個指標可以使volatitle嗎

可以,因為指標和普通變數一樣,有時也有變化程式的不可控性。常見例子:子中斷服務子程式修改乙個指向buffer的指標時,必須使用volatile來修飾這個指標

(8)a與&a的區別

main()

;int *ptr=(int *)(&a+1);

printf("%d,%d",*(a+1),*(ptr-1));

}

輸出結果是:2,5

&a+1不是首位址加1,系統會認為加了乙個整個a陣列,偏移了整個陣列a的大小也就是a[5],因此ptr 實際上是&(a[5])

(9)簡述c/c++程式編譯的記憶體分配情況

1;從靜態儲存區域分配

內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快、不容易出錯,因為有系統會善後。例如全域性變數,static變數等。

2;從棧上分配

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

3;從堆中分配

即動態記憶體分配。程式在執行的時候用malloc或者new申請任意大小的記憶體,程式設計師自己負責在何時使用free或者delete釋放記憶體。動態記憶體的生存期有程式設計師決定,使用非常靈活。如果再堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩露,另外頻繁的分配和釋放不同大小的堆空間將會產生堆內碎塊

乙個c/c++程式編譯時記憶體分為5大儲存區:堆區、棧區、全域性區、文字常量區、程式**區。

(10)簡述strcpy sprintf 與memcpy 的區別

三者主要有以下不同處(三者都可以實現拷貝功能)

1;操作物件不同。strcpy 的兩個操作物件均為字串,sprintf的操作源物件可以是多種資料型別,目的操作物件是字串,memcpy的兩個物件就是兩個任意可操作的記憶體位址,並不限於何種資料型別

2;  執行效率不同,memcpy最高,strcpy次之,sprintf的效率最低

3;實現功能不同,strcpy主要實現字串變數間的拷貝,sprintf主要實現其他資料型別格式到字串的轉化,memcpy主要是記憶體塊間的拷貝。

(11)設定位址為0x76a9的整型變數的值為0xaa66

int *ptr;

ptr = (int*)0x76a9;

*ptr = 0xaa66;

說明:這道題就是強制型別轉化的典型例子。

(12)物件導向的三大特徵

物件導向的三大特徵是封裝性、繼承性和多型性

1;封裝性:將客觀事物抽象成類,每個類對自身的資料和方法實現封裝

2;繼承性:廣義的繼承有三種實現形式:實現繼承(使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現**)、介面繼承 (僅使用屬性和方法,實現滯後到子類實現)

3;多型性:將父類物件設定成為和乙個或者更多它的子物件相等的技術。用子類物件給父類物件賦值之後,父類物件就可以根據當前賦值給它的子物件的特性以不同的方式運作

(13)乙個c++空類有哪些成員函式

1;預設建構函式  2;預設拷貝建構函式  3;預設析構函式  4;預設賦值運算子 5;預設取址運算子  6;預設取址運算子 const

(14)談談你對拷貝建構函式和賦值運算子的認識

拷貝建構函式和賦值運算子過載有以下兩個不同之處:

1;拷貝建構函式生成新的類物件,而賦值運算子不能

2;由於拷貝

Redis面試題50問

redis 面試題 50 問 1 什麼是redis?redis本質上是乙個key value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,redis的效能非常出色,每秒可以處理超過 1...

50隻狗 IBM面試題

乙個大院子裡住了50戶人家,每家都養了一條狗,有一天他們接到通知說院子裡有狗生病了,並要求所有主人在發現自己家狗生病的當天就要把狗槍殺掉。然而所有主人和他們的狗都不能夠離開自己的房子,主人與主人之間也不能通過任何方式進行溝通,他們能做的只是通過窗戶觀察別人家的狗是否生病從而推斷自己的狗病否。就是說,...

C 面試題之i 面試題

i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...