筆試題整理 1

2021-08-15 19:36:56 字數 1422 閱讀 6344

一、簡述陣列與指標的區別?

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在桟上被建立

指標可以隨時指向任意型別的記憶體塊

(1) 修改內容上的差別

char a = "hello";  a[0] = 'x';

char *p = "world";  p[0] = 'x';

指標p指向字串常量 不能修改

(2) 用運算子 sizeof 可以計算陣列的位元組數,而指標得到的是乙個指標

變數的位元組數

二、關鍵字 const 是什麼含義,有什麼作用?

含義:const 是乙個修飾符,被修飾的物件或者是變數是不可修改的,

也就是 const 可讀不可改,const 在誰的前面就修改誰。

c語言:

1、阻止乙個變數被改變,使用 const 來修飾

2、const 可以修飾指標本身,也可以修飾指標所指向的內容

3、在對乙個函式進行宣告的時候,可以使用 const 對形參進行修飾,

表明它是乙個輸入引數在函式的內部不可寫

c++:

1、const 用於定義常量,可以進行資料靜態型別安全檢查

2、const 修飾函式形式引數,輸入引數為使用者自定義型別和抽象資料型別時,

應該將"值傳遞"改為"const &"傳遞,提高效率。

3、對於類的成員函式,表明它是乙個常函式,不能修飾類的成員變數

4、對於類的成員函式,有時候必須指定其返回型別時 const ,這樣返回值不能被直接修改

三、請說出 const 與 #define 相比,有何優點?

1、const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查

而後者只進行字串替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤。

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

四、什麼是預編譯,何時需要預編譯?

預編譯又稱為預處理,是做些**文字的替換工作,處理以 # 開頭的指令,比如拷貝 #include 

包含的檔案**,#define 巨集定義的替換,條件編譯,就是為編譯做得預備工作的階段

1、總是使用不經常改動的大型**體

2、程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項

五、在c++程式中呼叫被c編譯器編譯後的函式,為什麼要加 extern"c"?

c++語言支援函式過載,c語言支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。

假設某個c函式的宣告如下:void foo(int x, int y);該函式被c編譯器編譯後在庫中的名字為_foo,

而c++編譯器會產生像_foo_int_int之類的名字用來支援函式過載和型別安全連線,由於編譯後

名字不同,c++程式不能呼叫c函式,c++提供了乙個c連線交換指定符號 extern"c"來解決這個問題。

筆試題整理

n副撲克,張數為m,大小為1 m,每幅撲克抽一張,求和恰好為k的組合數,結果對10e9 7取餘數。思路 動態規劃。和為i,j副撲克,dp i j dp i 1 j 1 dp i m j 1 此處需要判斷 i m 0 初始化,j 1,i m,dp i j 1 i j,dp i j 1,後面的情況不可能...

C 筆試題整理

1.已知string類定義如下 class string 嘗試寫出類的成員函式實現。答 string string const char str else string string const string another string string operator const string r...

最近筆試題整理

已知資料表a中每個元素距其最終位置不遠,為了節省時間,應該採取的演算法是 a.直接選擇排序 b.直接插入排序 c.堆排序 d.快速排序 當元素基本有序時,插入排序的排序時間在o n 選b直接選擇排序 straight select sorting 也是一種簡單的排序方法,它的基本思想是 第一次從r ...