c 面試題集錦

2021-08-03 21:19:15 字數 3413 閱讀 5930

這裡是面試題集錦,有自己親身經歷的,還有廣大熱愛c++同胞的知識分享。

1. 已知strcpy的函式原型:char *strcpy(char *strdest, const char *strsrc)其中strdest 是目的字串,strsrc 是源字串。不呼叫c++/c 的字串庫函式,請編寫函式 strcpy。

答案:/*編寫strcpy函式(10分)

已知strcpy函式的原型是

char *strcpy(char *strdest, const char *strsrc);

其中strdest是目的字串,strsrc是源字串。

(1)不呼叫c++/c的字串庫函式,請編寫函式 strcpy

(2)strcpy能把strsrc的內容複製到strdest,為什麼還要char * 型別的返回值?

答:為了 實現鏈式表示式。 // 2分

例如 int length = strlen( strcpy( strdest, 「hello world」) );

*/#include

<

assert.h

>

#include

<

stdio.h

>

char

*strcpy(

char

*strdest,

const

char

*strsrc)

另外 strlen函式如下:

#include

<

stdio.h

>

#include

<

assert.h

>

intstrlen(

const

char

*str )

//輸入引數const

return

len;}

2.求下面函式的返回值( 微軟)

intfunc(x)

return

countx;}

假定x = 9999。 答案:8

思路:將x轉化為2進製,看含有的1的個數。

3. .h標頭檔案中的ifndef/define/endif 的作用?

答:防止該標頭檔案被重複引用。

4. #include與#include "file.h"的區別?

答:前者是從standard library的路徑尋找和引用file.h,而後者是從當前工作路徑搜尋並引用file.h。

5. 多型的作用?主要是兩個:

1. 隱藏實現細節,使得**能夠模組化;擴充套件**模組,實現**重用;

2. 介面重用:為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫

6. #define double(x) x+x ,i = 5*double(5); i 是多少?

答案:i 為30。(注意直接展開就是了) 5 * 5 + 5

7. c++是不是型別安全的?

答案:不是。兩個不同型別的指標之間可以強制轉換(用reinterpret cast)。c#是型別安全的。

8. 描述記憶體分配方式以及它們的區別?

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

2)在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集。

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

4) **區。

9.請說出const與#define 相比,有何優點?

1)const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤。

2)有些整合化的除錯工具可以對const 常量進行除錯,但是不能對巨集常量進行除錯。

10. 如何判斷一段程式是由c 編譯程式還是由c++編譯程式編譯的?

答案:

#ifdef __cplusplus

cout

<<

"c++";

#else

cout

<

";#endif

11.檔案中有一組整數,要求排序後輸出到另乙個檔案中

答案:

#include

<

iostream

>

#include

<

fstream

>

using

namespace

std;

void

order(vector

<

int>&

data)

//bubble sort}if

( !tag )

break;}

} void

main(

void

)int

temp;

while(!

in.eof())

in.close();

//關閉輸入檔案流

order(data);

ofstream

out(

"c:\\result.txt");

if(

!out

)for

( i =0

; i<

data.size() ; i++)

out<<

data[i]

<

;out

.close();

//關閉輸出檔案流

}12.判讀是否含有中文

bool includechinese(char* str)

}return bhas;

}13.#define double(x) x+x; int i = 5 * double(5);計算i值

答:i=5*5+5=25+5=30

C 面試題集錦

1 基本的題目大概有以下幾個 1 用指標 引用或直接傳值來分配記憶體,哪個能成功,哪個會洩露 2 static在不同場景下的不同意義 3 vector和list有什麼區別 4 什麼是多型 5 new和malloc的區別 6 常量指標與指向常量的指標 7 原地逆轉鍊錶 8 判斷鍊錶是否有環 9 繼承 ...

面試題集錦

假定 54,首先,我們有乙個隨機函式發生器,能夠產生1 54之間的隨機數,如何保證抽第一張牌是54中可能,抽第二張牌是53中可能,可以這樣做,假設撲克牌是乙個54維的陣列card,我們要做的就是從這個陣列中隨機取乙個元素,然後在剩下的元素裡再隨機取乙個元素 這裡涉及到乙個問題,就是每次取完元素後,我...

面試題集錦

1 裝箱和拆箱的分別?答 裝箱就是把值型別轉換成引用型別 拆箱就是把引用型別轉換成值型別。2 怎樣建立乙個執行緒?答 一使用thread類 二使用delegate.begininvoke 三使用threadpool.queueworkitem。3 string是值型別,還是引用型別?與stringb...