C C 常用知識點筆記

2021-08-28 14:12:23 字數 1320 閱讀 7703

1.return、break、continue用法總結

首先通過乙個簡單的程式做乙個直觀上的理解:

#includeint main(void)

printf("i am here\n");

} printf("i am leving\n");

getch();

return 0;

}

2.c/c++語言中struct結構體定義中__packed的作用

//常用形式如下:

typedef __packed struck test_s

test_t;

//或者如下:

其實__packed或者__attribute__((packed))關鍵字的作用就是用來打包資料的時候以1來對齊,你比如說用來修飾結構體或者聯合體的時候,那麼這些成員之間就沒有間隙(gaps)。如果沒有加,那麼這樣結構體或者聯合體就會以他的自然對齊方式來對齊。比如某cpu架構的編譯器預設對齊方式是4, int的size也是4,char的size是1,那麼類似

typedef __packed struck test_s

test_t;

這樣定義的結構體的size就是8個位元組了。如果加上packed,size就會變成5個位元組,中間是沒有gaps的。

3. 結構體的記憶體對齊

每個特定平台上的編譯器都有自己的預設「對齊係數」,也可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一係數,其中的n就是你要指定的「對齊係數」。

//假如在此平台上int佔4個位元組

struct a;

struct b;

/*雖然a和b所包含的成員相同,但a佔了12個位元組,a1佔8個位元組,

所以在宣告中對結構體列表的排列,因該讓邊界要求嚴格的成員首先

出現(資料成員自生長度大的先出現)

*/

在利用串列埠傳送結構體資料時,由於是乙個乙個位元組傳送的,故對於不同方式對齊的機器,在編寫**時需通過預編譯命令#pragma pack(1)來進行一位元組對齊。否則接收到的資料與傳送的資料的大小可能不同。**示例如下:

C C 知識點複習筆記18 3 1

運算子過載時要遵循以下規則 1.除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,c 中的所有運算子都可以過載.2.過載運算子限制在c 語言中已有的運算子範圍內的允許過載的運算子之中,不能建立新的運算子.3.運算子過載實質上是函式過載,因此編譯程式對運算子過載的...

C C 知識點複習筆記18 3 3

建構函式不能宣告為虛函式 儲存型別 1 自動變數auto 函式中所有的非靜態區域性變數.2 靜態變數static 在變數前加上static關鍵字的變數.3 外部變數extern 一般用作全域性變數作用域的擴充套件 還有定義外部函式的時候前面也可以有乙個extern關鍵字 4 暫存器變數registe...

C C 知識點記錄

atof 功能是把字串轉換成浮點數。char str 12345.67 d atof str cout 將會把str字串轉換為浮點數,並輸出 記錄遇到的各種小知識點,不斷補充 std cout 20 32 32 對於輸出結果為0,原來也遇到過,但突然有感覺很不可思議。仔細分析後找到了原因 20 32...