C 面試出現頻率最高的30道題目(二)

2021-09-06 10:26:11 字數 2413 閱讀 9560

(1). 結構和聯合都是由多個不同的資料型別成員組成

, 但在任何同一時刻

, 聯合中只存放了乙個被選中的成員(所有成員共用一塊位址空間)

, 而結構的所有成員都存在(不同成員的存放位址不同)。 

(2). 對於聯合的不同成員賦值

, 將會對其它成員重寫

, 原來成員的值就不存在了

, 而對於結構的不同成員賦值是互不影響的。

int  a=4;

int  &f(int  x)

int main(void)

常考的題目。從定義上來說:

過載:是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。

重寫:是指子類重新定義父類虛函式的方法。

從實現原理上來說:

過載:編譯器根據函式不同的參數列,對同名函式的名稱做修飾,然後這些同名函式就成了不同的函式(至少對於編譯器來說是這樣的)。如,有兩個同名函式:function func(p:integer):integer;

和function func(p:string):integer;

。那麼編譯器做過修飾後的函式名稱可能是這樣的:

int_func

、str_func

。對於這兩個函式的呼叫,在編譯器間就已經確定了,是靜態的。也就是說,它們的位址在編譯期就繫結了(早繫結),因此,過載和多型無關!

重寫:和多型真正相關。當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,動態的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在執行期繫結的(晚繫結)。

答案:當類中含有const

、reference 

成員變數;基類的建構函式都需要初始化表。

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

是型別安全的。

答案:全域性物件的建構函式會在main 

函式之前執行。

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

static 

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

3) 從堆上分配,亦稱動態記憶體分配。程式在執行的時候用

malloc 

或new 

申請任意多少的記憶體,程式設計師自己負責在何時用

free 

或delete 

釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但問題也最多。

答案:

bool : if ( !a ) or if(a)

int : if ( a == 0)

float : const expression exp = 0.000001

if ( a < exp && a >-exp)

pointer : if ( a != null) or if(a == null)

答案:

const作用:定義常量、修飾函式引數、修飾函式返回值三個作用。被

const

修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。

1) const 

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

2) 有些整合化的除錯工具可以對

const 

常量進行除錯,但是不能對巨集常量進行除錯。

陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。

(1)修改內容上的差別

char a = 「hello」;

a[0] = 『x』;

char *p = 「world」; // 注意

p 指向常量字串

p[0] = 『x』; // 編譯器不能發現該錯誤,執行時錯誤

(2) 用運算子

sizeof 

可以計算出陣列的容量(位元組數)。

sizeof(p),p 

為指標得到的是乙個指標變數的位元組數,而不是

p 所指的記憶體容量。

c++/c 

語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。

char a = "hello world";

char *p = a;

cout<< sizeof(a) << endl; // 12 位元組

cout<< sizeof(p) << endl; // 4 位元組

計算陣列和指標的記憶體容量

void func(char a[100])

C 面試出現頻率最高的面試題

相同 memtest mtest1 new memtest 10 memtest是非原子型別,memtest 10 呼叫10次非原子型別 memtest mtest2 new memtest int pint1 new int 10 int a 10 int 10 是型別,呼叫10次int原子型別 ...

c 求陣列中出現頻率最高的數

在c 中求陣列中出現頻率最高的數mode。即 眾數 mode 統計學名詞,在統計分布上具有明顯集中趨勢點的數值,代表資料的一般水平 眾數可以不存在或多於乙個 修正定義 是一組資料中出現次數最多的數值,叫眾數,有時眾數在一組數中有好幾個。用m表示。理性理解 簡單的說,就是一組資料中佔比例最多的那個數。...

今天面試遇到的一道C語言題目

今天面試三道c語言上機題目,我完成了前兩道,但是最後的這道題目卻讓我搞到為難。題目大概是這樣的。有int getstring char buffer,char addr 函式原型,其中第乙個引數是乙個指向內容的字元指標,這些內容中有多個以 0 結為的字串,最後結束位置為兩個 0 第二個引數為將來儲存...