C 面試知識點總結

2022-04-09 22:58:02 字數 2590 閱讀 5617

#巨集定義求最大值  

>#define max(x,y) ((x)>(y)?(x):(y))

#const與define區別define 

>在編譯前執行,無資料型別,僅僅在編譯前做替換const存在於程式中資料段,分配空間,有資料型別

與c中#define的異同

在c++中的用法

1. 與c中#define相同的功能:字元替換

2. 保護資料

3. 結合引用傳遞,保護資料,提高效率

#const在c++中的作用

>修飾常量 : 編譯器對其進行資料靜態型別安全檢查

>修飾形參 :func( a const &a); 傳入a的引用可以提高效率,但引用容易改變原值,所以加const保護

>修飾函式返回值:當返回指標時給返回值加const , 則返回值不能被直接修改,並且賦值給 const修飾的變數

>修飾成員函式:對於不需要修改成員變數的成員函式,都應該加const以避免誤修改成員變數。

#static有什麼作用

>在函式體,維持靜態變數在函式呼叫過程不變

>用來將變數或函式的作用於限制在本模組(檔案)內

>static函式在記憶體中只有乙份

>類中的static成員,所有物件共享。不屬於具體物件,因此需要在類外面初始化,並且不能試用this指標

#.static全域性變數/區域性變數/函式  與 普通全域性變數/區域性變數/函式 的區別

a、全域性變數:static作用域在當前檔案(只能被初始化一次,防止在別的檔案被引用)

b、區域性變數:static變數只初始化一次,下次呼叫使用上次的值

c、函式:static函式在記憶體中只有乙份,普通函式每呼叫一次都維持乙份複製品。

#.c++中的static靜態成員

a、靜態成員變數目的:替代全域性變數

b、特徵:類定義前就已經分配空間,因此必須在類外面初始化

c、satic成員的引用:《類名》::《靜態成員名》

d、satic屬於整個類而不是某個物件,因此沒有this指標,因此他只能訪問類的靜態資料和靜態函式

static的兩大特徵 :

1.永續性:

值不變2. 隱藏性:

限定變數,函式,類成員的作用範圍 

3. 封裝性:作為類成員時,其他類無法訪問,本類的不同物件可以訪問(可用作物件通訊的方式)

在c中的特性及用法

-宣告及儲存:存放在全域性區,而不是程式堆疊中,因此每次呼叫值都一樣

-僅在自己的作用範圍可見(函式中,其他函式不可見;檔案中,其他檔案不可見),降低耦合度

在c++中的用法

#函式內部

#區域性靜態物件

#類中static成員

- 隱藏

- 物件間資料共享(通訊),資料持久

- 預設初始化為0

#求以下sizeof空間占用

>char p = "hello";   

// 6, p為陣列,儲存了 hello+\0 ,  

>char p[20] = "hello";

//20 ,p為陣列,20個元素

>char str="hello"; char p = str;  

// 4, p為指標

>void func( char p[100] ){}  

// 4, p為指向陣列的指標

>void *p = malloc(100); 

// 4 , p為指向100位元組堆記憶體的指標

>sizeof 乙個空類物件

// 1,普通函式不佔空間,但編譯器會安插乙個char成員,以便可以分配位址

>sizeof乙個含有虛函式的物件

// 4 ,虛函式指標(指向虛函式表)

>sizeof虛繼承自a同時虛繼承自b

// 8 ,針對每個基類的繼承會有不同的虛指標

#.sizeof和strlen區別

char str = "hellow" , sizeof(str)=strlen("hellow")+1 

#.內聯函式inline 與巨集定義的區別

>inline在編譯時展開,巨集在預編譯時展開

>inline函式可在編譯時直接嵌入到目標**,而巨集只是做字元替換

>inline函式會對資料型別,語法進行檢測,巨集不會

>巨集引數容易引起二義性

>inline是為了提高呼叫效率

>只有inline函式能訪問類成員,巨集定義則不行,起到封裝性

#引用和指標區別

>初始化,引用建立的同時必須初始化。

>修改,引用初始化後不可在引用別的物件,但指標可以重新指向別的物件

>不存在 null 的引用 ,因此不需要在使用引用前檢查引用的合法性

>基於以上兩點,引用比指標安全

#記憶體分配

>malloc , 分配sie個位元組空間,未初始化

>calloc ,分配n塊長度為size空間,已初始化

>reallc ,拓展空間到size

>new , delete ,在構造和析構函式中用來申請,釋放記憶體

#.構造和析構

a.構造可過載,析構不能

b.為什麼基類的析構函式是虛函式:在析構時防止只析構基類而不析構派生類的狀況發生

from wiznote

C 面試知識點

大概是一些面試可能會碰到的c 知識點。具體見effective c 3e 宣告使得名字為程式所知,而定義負責建立與名字關聯的實體 只在堆上 將建構函式和析構函式設定為保護,再定義兩個函式專門用於建立和銷毀物件。只在棧上 禁用class的new運算子,就是將class的operator new宣告為私...

《C 面試知識點》

動態記憶體 1.由內建指標管理的動態記憶體 即new和delete管理動態記憶體 直到被顯式釋放之前它都是存在的。假設該指標變數被銷毀,那該記憶體將不會自動釋放 即所謂的 記憶體洩漏 2.可以用new返回的指標來初始化智慧型指標,但必須使用直接初始化的形式,而不能隱式轉換,因為接受指標引數的智慧型指...

Linux面試總結知識點

1.一台主機要實現通過區域網與另乙個區域網通訊,需要做的工作是?定義一條本機指向目標網路閘道器的路由 2.下列關於檔案系統中元資料 比如ext2中的inode 的基本作用及ext2和ext3的根本區別描述錯誤的有?b a.ext2 inode用來定義檔案系統的結構以及描述系統中每個檔案的管理資訊,每...