空陣列的使用技巧

2021-10-14 12:08:21 字數 1974 閱讀 8597

陣列(array)是有序的元素序列。乙個長度為0的陣列我們稱之為「空陣列」,空陣列是乙個真正的物件,只是包含元素個數為0。。

我們可以先做個實驗。(本文實驗在 64位機測試)

int aa[1];

int bb[0];

printf("aa address %p \r\n",&aa);

printf("aa sizeof %ld \r\n",sizeof(aa));

printf("bb address %p \r\n",&bb);

printf("bb sizeof %ld \r\n",sizeof(bb));

檢視輸出結果

aa address 0x7ffffef2fe5c

aa sizeof 4

bb address 0x7ffffef2fe58

bb sizeof 0

可得出結論:

空陣列有位址

空陣列不佔空間

還是先上**

#include struct stu_test1

;struct stu_test2

;struct stu_test3

;struct stu_test4

;int main()

可以看一下測試結果

/*沒有空陣列*/

stu_test1 lengh is 8

/*包含空陣列*/

stu_test2 lengh is 8

/*陣列長度為1*/

stu_test3 lengh is 12

/*char型別的指標*/

stu_test4 lengh is 24

/*列印結構體的位址*/

test2 a address is 0x7ffffef2fe60

test2 char address is 0x7ffffef2fe64

test2 b address is 0x7ffffef2fe64

五組測試可得出結論:

結構體的大小等於兩個int型別的大小;

結構體的大小等於兩個int型別的大小,空陣列不占用結構體大小;

結構體的大小等於三個int型別的大小,編譯器優化的結果;

結構體的大小等於兩個int型別的大小 加上乙個指標的大小;

空陣列如何使用,我們可以從他的特性出發。

不需要初始化,陣列名直接就是所在的偏移

不佔任何空間,指標需要占用int長度空間,空陣列不佔任何空間。

空陣列陣列不占用任何記憶體,可以節省空間;

空陣列的記憶體位址就和他後面的元素的位址相同,所以陣列名就是後面元素的位址,直接就能當做指標使用。

這樣的寫法可以來製作動態快取區。

所以我們可以這樣來使用他:

struct stu_test

;malloc(sizeof(struct stu_test)+ buff_len);

buff_len來指定str的長度,就可以直接使用了。

這樣就只需要申請一次記憶體。如果是分兩次分配(結構體和緩衝區),那麼要是第二次malloc失敗了,必須回滾釋放第乙個分配的結構體。這樣帶來了編碼麻煩。其次,分配了第二個緩衝區以後,如果結構裡面用的是指標,還要為這個指標賦值。同樣,在free這個buffer的時候,用指標也要兩次free。如果用空陣列,所有問題一次解決。

另外小記憶體的管理是非常困難的,如果用指標,這個buffer的struct部分就是小記憶體了,在系統內存在多了勢必嚴重影響記憶體管理的效能。要是用空陣列把struct和實際資料緩衝區一次分配大塊問題,就沒有這個問題。

空陣列不占用任何空間,需要使用的時候可以在指定長度,這樣就實現了動態陣列,既不定長陣列。

C 陣列的使用和技巧

陣列是一種資料結構,其宣告方式如下 type arrayname 陣列具有以下屬性 1.陣列可以是一維 多維或交錯的。2.數值陣列元素的預設值設定為零,而引用元素的預設值設定為 null。3.交錯陣列是陣列的陣列,因此,它的元素是引用型別,初始化為 null。4.陣列的索引從零開始 具有 n 個元素...

js 空陣列 空物件判斷

12 vararr newarray 或 var arr 我們知道,初始化後,即使陣列arr中沒有元素,也是乙個object。12 typeofarr object 既然是object,用於判斷條件時就會被轉化為true12 if arr console.log it s true it s tru...

Linux Shell 陣列的建立及使用技巧

linux shell在程式設計方面比windows 批處理強大太多,無論是在迴圈 運算。已經資料型別方面都是不能比較的。下面是個人在使用時候,對它在陣列方面一些操作進行的總結。1.陣列定義 chengmo centos5 a 1 2 3 4 5 chengmo centos5 echo a 一對括...