鏈結
空陣列即下標為0的陣列,如a[0]。在函式中宣告空陣列是沒有任何意義的,當然也編譯不過。而在類或結構體中,是可以這樣宣告的。
struct ast_exten ;
又如:struct ast_include ;
struct ast_ignorepat ;
這是個廣泛使用的常見技巧,常用來構成緩衝區。比起指標,用空陣列有這樣的優勢:
1.不需要初始化,陣列名直接就是所在的偏移
2.不佔任何空間,指標需要占用int長度空間,空陣列不佔任何空間。
「這個陣列不占用任何記憶體」,意味著這樣的結構節省空間;「該陣列的記憶體位址就和他後面的元素的位址相同」,意味著無需初始化,陣列名就是後面元素的位址,直接就能當做指標使用。
這樣的寫法最適合製作動態buffer。因為可以這樣分配空間:
malloc(sizeof(struct ***)+ buff_len);
看出來好處沒有?直接就把buffer的結構體和緩衝區一塊分配了。用起來也非常方便,因為現在空陣列其實變成了buff_len長度的陣列了。
這樣的好處是:
一次分配解決問題,省了不少麻煩。大家知道為了防止記憶體洩漏,如果是分兩次分配(結構體和緩衝區),那麼要是第二次malloc失敗了,必須回滾釋放第乙個分配的結構體。這樣帶來了編碼麻煩。其次,分配了第二個緩衝區以後,如果結構裡面用的是指標,還要為這個指標賦值。同樣,在free這個buffer的時候,用指標也要兩次free。如果用空陣列,所有問題一次解決。
其次,大家知道小記憶體的管理是非常困難的,如果用指標,這個buffer的struct部分就是小記憶體了,在系統內存在多了勢必嚴重影響記憶體管理的效能。要是用空陣列把struct和實際資料緩衝區一次分配大塊問題,就沒有這個問題。
如此看來,用空陣列既簡化編碼,又解決了小記憶體碎片問題提高了效能。
空陣列不占用空間
#include #include typedef struct
hc_bt_hdr;
hc_bt_hdr hc_hdr;
void main(void)
C語言注意問題 空指標
1 空指標表示 未分配 或者 尚未指向任何地方 它與未初始化的指標不同,未初始化的指標可能指向任何地方。每種指標型別都要乙個空指標,而不同型別的空指標的內部可能不盡相同。2 一般給指標賦值0就是將指標設為空指標 等同設為null 但是0作為函式引數,傳給指標時需要對0作型別轉換。3 可以使用if p...
js 空陣列 空物件判斷
12 vararr newarray 或 var arr 我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。12 typeofarr object 既然是object,用於判斷條件時就會被轉化為true12 if arr console.log it s true it s tru...
c語言陣列
陣列 構造資料型別之一 陣列是具有一定順序關係的若干個變數的集合,組成陣列的各個變數稱為陣列的元素。陣列中各元素的資料型別要求相同,用陣列名和下標確定。陣列可以是一維的,也可以是多維的。在科學計算中,許多重要的應用都是基於陣列的。所謂一維陣列是指只有乙個下標的陣列。它在計算機的記憶體中是連續儲存的。...