讀書筆記《c語言深度解剖》 4

2021-05-21 17:32:58 字數 1328 閱讀 5406

10.struct關鍵字

這裡struct關鍵字講解得比較少,主要有3點:

(1)空結構體的大小為1(在gcc下我的輸出是0).(2)柔性陣列:在c99中,允許結構最後乙個元素是乙個大小未確定的陣列,這個陣列叫做柔性陣列。但是柔性陣列前面必須至少有乙個其他成員。用sizeof返回結構體大小的時候,並不包含柔性陣列大小。但是在為含有柔性陣列的結構體分配記憶體時,應該用malloc()函式進行動態分配,並且分配的記憶體大小應大於結構體的大小,以適應柔性陣列的預期大小。然後,我們可以用p->b[index]訪問柔性陣列,然而,此時sizeof(mytype)的值仍然為4.也就是說,柔性陣列只能算個編外人員。(注意,c89不支援柔性陣列)

(3)struct和class的區別:struct預設訪問許可權為public,而class為private。

11.union關鍵字

union關鍵字用足夠大的空間來維護眾多成員中的乙個,所有的成員具有相同的起始位址。例如:在這個union中,最大長度的是double,所以a的大小就是double所需空間的大小。union的預設訪問許可權為public,主要用來壓縮空間。

乙個常見的例子是,用union來判斷當前系統採用的是大端還是小端儲存模式。**為:大端模式int i = 1:低 0x00 0x00 0x00 0x01 高

小端模式int i = 1:低 0x01 0x00 0x00 0x00 高

12.enum關鍵字

enum的定義一般如下:其中enum_type是自定義的一種資料型別名,e是該型別的乙個變數。e只能取花括號內的任何乙個值。如果不賦值,花括號內的值從0開始一直加1.上面的例子中,item_1 = 0, item_2 = 1, item_3 = 10, item_4 = 11。那麼enum和#define巨集的區別是什麼呢?

(1)#define巨集是在預編譯的時候進行簡單的替換,enum是在編譯的時候確定其值

(2)一般在編譯器裡,可以除錯enum常量,不能除錯#define巨集常量。

(3)enum可以一次性定義大量的相關常量,#define巨集一次只能定義乙個。上面這個例子說明,enum型別的變數是被當做int型來處理的。

C語言深度解剖讀書筆記1

關鍵字 意義關鍵字 意義auto 宣告自動變數,預設時編譯器一般預設為auto register 宣告暫存器變數 int宣告整型變數 const 宣告唯讀變數 double 宣告雙精度變數 volatile 說明變數在程式執行中可被隱含地改變 long 宣告長整型變數 typedef 用以給資料型別...

C語言深度解剖讀書筆記3

int p null 和 p null 的區別int p null 可以通過偵錯程式檢視p的值為 0x00000000 這句 的意思是 定義乙個指標變數p,其指向的記憶體裡面儲存的是 int 型別的資料 在定義變數p的同時把p的值設定為 0x00000000,而不是把 p 的值設定為0x000000...

C語言深度解剖 筆記4

1最易變的關鍵字 volatile 型別修飾符 用volatile修飾的變數表示可以被某些編譯器未知的因素更改,比如作業系統 硬體或者其他執行緒等。遇到這個關鍵字宣告的變數,編譯器對訪問該變數的 就不再進行優化,從而可以提供對特殊位址的穩定訪問。比如 volatile關鍵字告訴編譯器某變數是隨時可能...