這裡是面試題集錦,有自己親身經歷的,還有廣大熱愛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...