C 特性總結(一)

2021-10-07 04:15:08 字數 2411 閱讀 2104

1 **編譯過程:

源** -> 編譯器 -> 目標** -> 鏈結器 -> exe

其中,鏈結過程為鏈結庫**和啟動**,目標**為中間生成的 .obj檔案

2 define與typedef

define定義的時候不進行檢查,只是乙個別名作用,作用域在全域性

typedef定義的時候會進行型別檢查功能,同樣有別名作用,不能在函式裡用typedef,其typedef有自己的作用域

3 程式記憶體分配區域

棧:編譯器自動分配釋放,區域性變數,函式引數等

堆:由程式設計師控制釋放(malloc,new)

全域性(static):全域性變數,靜態變數,程式結束後釋放

文字常量:常量字串

程式**區:放函式體的二進位制**

4 new malloc區別

位置new 在自由儲存區(free store),malloc在堆

返回型別安全性new返回物件型別指標,malloc記憶體分配成功時返回void*然後再強轉成需要的。

**記憶體分配失敗時:**new 丟擲bac_alloc異常,不會返回null, maclloc失敗返回null

分配時記憶體大小的指定:new 無需,會根據型別資訊自行計算,malloc需要顯示指出。

構造與析構函式:new delete有,malloc無

是否可過載:malloc/free不可過載

總結:malloc就是比較原始,啥都要自己定義下,malloc就像有模組直接用就用。但malloc不一定就比new差,有各自適用的地方。

5 ++i, i++

++i相當於

i = i +

;return i;

i++相當於

int j = i;

i = i +1;

return j;

6 struct ,class區別預設的public private許可權

7 union

可以有多個成員,大小由最大的成員決定。

共享乙個記憶體,一次只能使用乙個成員。

8 extern

extren int a// 宣告

int a// 定義

extern int a =0;

// 定義

int a =0;

// 定義

9 constconst 使變數只有讀取屬性(不一定就不能改)

源自:懷想天空

10 volatile

volatile 影響編譯器的編譯結果,具體就是 volatile變數可能發生變化,與volatile有關的就不進行編譯優化,避免出錯。

出錯點可能在於:每次使用的時候都會從i的位址讀取資料進行操作,優化就是使第2次後不從i進行操作,那麼volatile的作用就是把上次都的資料放在最後一次使用的k中,這樣就對特殊位址能夠進行穩定訪問。

11 restrict

告述編譯器,物件已經被指標所引用,不能通過除該指標外所有其他直接或間接的方式修改該物件的內容。

作用:本質是乙個安全性的操作,防止多指標使其發生改變。

12 匿名結構體

作用:防止結構體中多重巢狀(安全性)

13 ifdef endif

作用:在不同環境(win, linex)下,一些變數,函式等的不同

14 泛型

在寫一些可重複使用的演算法,其效率與針對某特定資料型別而設計的演算法相同時,可以有void *的方法來進行泛型程式設計。

但是泛型程式設計是一定安全,系統對其只有有限的檢車。

如寫乙個sawp,泛型的做法能夠避免寫過多的多型**

template 

void

myswap

(t &a, t &b)

15 exit()頭文字:stdlib.h

exit(0):正常退出

exit(1): 非正常

物件:os, return結束的時候也會呼叫exit

C 特性總結

1 c 中類分為兩部分,成員變數和成員函式。成員函式位於 區,不占用類物件的空間。成員變數占用類物件的空間。2 每個成員函式有乙個this指標,一般情況下是成員函式的第乙個引數。3 物件一般情況下也是有資料對齊的。4 虛函式 如果乙個類中有虛函式,則會為此類生成乙個虛表 位於 區 然後在每個類物件的...

C 容器特性總結

順序容器 vector 可變大小陣列。支援此快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢。deque 雙端佇列。支援快熟隨機訪問。在頭尾位置插入 刪除速度很快。list 雙向鍊錶。只支援雙向順序訪問。在鍊錶任何位置進行插入 刪除操作速度都很快。forward list 單向鍊錶。只支援單向順...

C 3 5 新特性的總結 一

c 3.5 新特性的總結 一 物件初始化 如果乙個類有public欄位,在建立類的物件例項時可以使用下面的 來初始化這些字段 public class myclass myclass my new myclass my.field1 abcd my.field2 44 my.field3 true ...