C C 瑣碎知識歸納之二

2021-07-10 12:40:02 字數 2661 閱讀 3180

(1). malloc 函式: void *malloc(unsigned int size)

在記憶體的動態分配區域中分配乙個長度為size的連續空間,如果分配成功,則返回所分配記憶體空間的首位址,否則返回null,申請的記憶體不會進行初始化。

(2).calloc 函式: void *calloc(unsigned int num, unsigned int size)

按照所給的資料個數和資料型別所佔位元組數,分配乙個 num * size 連續的空間。calloc申請記憶體空間後,會自動初始化記憶體空間為 0,但是malloc不會進行初始化,其記憶體空間儲存的是一些隨機資料。

(3).realloc 函式: void *realloc(void *ptr, unsigned int size)

動態分配乙個長度為size的記憶體空間,並把記憶體空間的首位址賦值給ptr,把ptr記憶體空間調整為size。

申請的記憶體空間不會進行初始化。

(4).new是動態分配記憶體的運算子,自動計算需要分配的空間,在分配類型別的記憶體空間時,同時呼叫類的建構函式,對記憶體空間進行初始化,即完成類的初始化工作。動態分配內建型別是否自動初始化取決於變數定義的位置,在函式體外定義的變數都初始化為0,在函式體內定義的內建型別變數都不進行初始化。

2. 類成員的過載、覆蓋和隱藏

a.成員函式被過載的特徵:

(1)相同的範圍(在同乙個類中);

(2)函式名字相同;

(3)引數不同;

(4)virtual 關鍵字可有可無。

b.覆蓋是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類);

(2)函式名字相同;

(3)引數相同;

(4)基類函式必須有virtual 關鍵字。

c.「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)

3. c/c++函式strcmp,比較兩個字串,設這兩個字串為str1,str2,

若str1==str2,則返回零;

若str1>str2,則返回正數;

若str1《str2,則返回負數。

4. c程式生成過程

預處理是 c 語言程式從源**變成可執行程式的第一步,主要是 c 語言編譯器對各種預處理命令進行處理,包括標頭檔案的包含、巨集定義的擴充套件、條件編譯的選擇等。

編譯之前,c 語言編譯器會進行詞法分析、語法分析 (-fsyntax-only) ,接著會把源**翻譯成中間語言,即組合語言 。 編譯程式工作時,先分析,後綜合,從而得到目標程式。所謂分析,是指詞法分析和語法分析;所謂綜合是指**優化,儲存分配和**生成。 值得一提的是,大多數的編譯程式直接產生機器語言的目標**,形成可執行的目標檔案,但也有的編譯程式則先產生組合語言一級的符號**檔案,然後再呼叫匯程式設計序進行翻譯加工處理,最後產生可執行的機器語言目標檔案。

鏈結是處理可重定位檔案,把它們的各種符號引用和符號定義轉換為可執行檔案中的合適資訊( 一般是虛擬記憶體位址 ) 的過程。

5. cin

該操作符是根據後面變數的型別讀取資料。

輸入結束條件 :遇到enter、space、tab鍵。

對結束符的處理 :丟棄緩衝區中使得輸入結束的結束符(enter、space、tab)

6. 類的靜態成員變數是否必須初始化

題:在工程網路計畫中,工作 m 的最早開始時間為第 16 天,其持續時間為 5 天。該工作有三項緊後工作,他們的最早開始時間分別為第 25 天、第 27 天和第 30 天,最遲開始時間分別為第 28 天、第 29 天和第 30 天。則工作 m 的總時差為()天。

答:對於有緊後工作的工作,其自由時差等於本工作之緊後工作最早開始時間的最遲時間減本工作最早完成時間所得之差的最小值,即:自由時差=28-(16+5)=7天。

9. malloc(0)的記憶體分配情況

#include

using

namespace

std;

int main()

答案:got a valid pointer

首先:

在標準的malloc實現中,並不檢查輸入值的大小,而是將輸入值做對齊操作後直接從堆上分配空間。

其次:

不論輸入值的大小為多少,在malloc的內部最小的記憶體分配大小是乙個定值(一般是8b),因為malloc需要用這部分空間來維護堆上的記憶體塊鍊錶。所以當使用者申請一塊0b的空間時,malloc實際分配的空間是8b,如果使用者申請的空間是x,則malloc實際分配的空間是(對齊(x) + 8)。這也是為什麼malloc分配的空間千萬不能越界使用的原因:堆的內部鍊錶結構將被破壞。

10. 兩棵樹相等

兩棵樹相等:根節點相等,而且左右字數對應相等或者左右互換後相等

C C 瑣碎知識歸納之一

1.記憶體洩露 2.volatile 3.前後 與小括號的關係 4.派生類中基類建構函式 成員中其他類物件的建構函式 派生類自己的建構函式執行順序 5.建構函式和析構函式能否為虛函式 6.字元變數賦值 7.utf 16和utf 8 8.類中例項化其他類物件時,其他類建構函式的順序 9.異或 滿足交換...

C C 小知識總結之二

1 include conio 是console input output 控制台輸入輸出 的簡寫,其中定義了通過控制台進行資料輸入和資料輸出的函式,主要是一些使用者通過按鍵盤產生的對應操作,比如 getc h 函式等等。2 include kalman k.h include 有的程式用 有的卻用...

DBA 知識點歸納 二

10.rowid和rownum的區別 rowid和rownum都是偽列,但含義完全不同。1 rowid是實體地址,用於定位oracle中具體資料的物理儲存位置 2 rownum則是sql的輸出結果排序 11.資料檔案 1 資料檔案的特性 每個資料檔案只與乙個資料庫相關聯 資料檔案一旦建立,就不能改變...