C C 學習小結

2021-09-17 18:45:47 字數 1003 閱讀 9981

首先簡單了解一下程序的記憶體分配。

程序被裝載到一塊記憶體中,記憶體分為以下區域:

**區(text):程式需要執行的指令,即各函式編譯生成的指令。

資料區:包含了明確被初始化的全域性變數,(所有)靜態變數,和資料常量。

未初始化資料區(bss):該部分資料在程式執行前被核心初始化為0或者null。

棧區:儲存區域性變數與函式形式引數。棧由程式自動管理。每個程序有各自的棧,最大長度固定,程式執行時棧中儲存資料超過最大長度則發生棧溢位。

堆區:堆的空間由程式設計師管理,理論上可以使用除作業系統占用外的所有記憶體。申請與釋放由程式設計師管理。

1、static關鍵字可以將變數宣告為靜態變數。即使變數裝入資料區或bss區。不會進出棧,在程式開始時即被初始化,且在整個程序生命週期只初始化一次(無論定義於何處)。

2、當static修飾全域性變數時,該變數只能在本檔案中被訪問,即使外部檔案使用extern也無法訪問。全域性變數應該首先考錄是否使用static。

3、當修飾函式時,同樣無法i在其他檔案中呼叫該函式。

4、c++中,static可以生命類的成員為靜態成員。靜態資料成員屬於類二不屬於例項化的物件,所以物件共享有乙個靜態資料成員,即使不存在例項化物件靜態成員也會被分配記憶體空間。初始化要在類體外。

5、靜態成員函式同樣屬於類,且只能訪問靜態資料成員。

可以理解為一種行為有多種完成的方法。也就是同名的函式對應了多種實現,並在不同的情況下呼叫不同的實現方式。這樣可以實現介面的統一性。

多型的實現分為動態聯編和靜態聯編。

靜態聯編指在編譯時實現多型性,這種多型成為靜態多型。後者則是在執行階段實現多型性,稱為動態多型性。

靜態多型性可通過函式過載和運算子過載實現。

運算子過載本質上也是函式過載。

運算子過載可通過成員函式過載和友元函式過載實現。

通過虛函式與基類的指標(引用)實現。

當基類成員函式宣告為虛函式,派生類**現同名函式,在基類指標指向基類時呼叫基類成員函式,指向派生類則呼叫派生類成員函式。

虛函式實現方式:

學習c c 技術小結

偽指令 pragma pack n 這個指令用於告訴編譯器,程式裡面的結構體按到n個位元組對齊。pragma pack 取消自定義的位元組對齊。class和struct的比較 sta s 合法,但是如果是class的話,不能這麼做。extern c 解析 extern表示函式和變數的作用範圍,表示可...

C C 筆試小結

若使用陣列作函式實參,則以下正確的說法是 a 必須在主調函式中說明此陣列的大小b 實參陣列型別與形引數組型別可以不匹配c 在被呼叫函式中,不需要考慮形引數組的大小d 實參陣列名與形參陣列名必須一致以下程式的輸出結果為 int i void prt main 全域性變數 i main 中修改為i 5 ...

C C 記憶體小結

記憶體用於儲存程式中的資料,由儲存期 作用域和鏈結表徵。儲存期可 以是靜態的 自動的或動態分配的。如果是靜態儲存期,在程式開始執行時 分配記憶體,並在程式執行時都存在。如果是自動儲存期,在程式進入變數定 義所在塊時分配變數的記憶體,在程式離開塊時釋放記憶體。如果是動態分配存 儲期,在呼叫malloc...