擴充套件的陣列型別

2022-09-18 05:09:26 字數 1083 閱讀 9465

擴充套件的陣列型別:

int array[10],這樣元素的偏移位址依次為0,4,8…當知道起始位址array時,我們可以通過(array + 4*i)獲得每個元素的位址,進而獲得每個元素的值

2.  擴充套件的陣列型別中,我們申請一連續的記憶體塊,其中存放不同型別的陣列元素,這樣每個元素占用的記憶體長度是不同的,每個元素在陣列中的偏移位址也不再是乙個等差的距離,通常我們使用擴充套件陣列時,我們需要儲存的資料的資料型別是已知的,我們統計好每個資料的資料名,資料型別,資料長度並通過某種方式為每個資料分配乙個偏移位址,定義乙個描述性結構體,為每個資料配置乙個描述性結構體,這樣我們可以計算所有的資料需要的總記憶體大小,申請一塊記憶體空間用來存放之前統計的所有資料,現在我們已經清楚這塊記憶體那部分存放什麼資料了,進一步,我們就可以根據資料名為其賦值和讀取需要資料了。

通常這個描述性結構體定義方式如下:

typedef struct data_infodata_info

通過分析我們可以發現,在擴充套件陣列中,我們需要:

1)  資料定義:

a)  分析我們要存放的資料有哪些,需要知道要存放的資料的資料名,資料長度,資料型別

b)  定義乙個描述性的資料結構,為要儲存的每個資料配置乙個這樣的描述性資料結構,記錄這個資料的資料名,資料型別,資料長度,並通過某種方式計算每                             個資料的偏移位址,計算所有資料的總大小(通常我們用乙個結構體陣列儲存這些描述性結構體)

c)  申請乙個連續的記憶體空間,用來存放所有的資料

2)  資料賦值

a)  通過資料名檢索要這個資料對應的結構體,進而獲知這個資料的資料長度及偏移位址

b)  用memcpy()操作這個資料所在的記憶體塊,即將要寫入的資料複製到這個記憶體塊中

3)      資料讀取

a)  通過資料名檢索到要讀取的資料對應的結構體,進而獲知這個資料的資料長度及偏移位址

b)  用memcpy()操作這個資料所在的記憶體塊,即將這塊內容複製出來進行讀取

注:使用擴充套件的資料型別時,這個描述性的結構體要先於存放資料的記憶體產生,這樣我們知道需要多大記憶體,那部分內存放那個資料後,先按照我們的約定申請記憶體,進行賦值和讀取,可以稱之為先定規則,在運算元據。

陣列的擴充套件

陣列的擴充套件 es5 的寫法 function f x,y,z var args 0 1,2 f.null args es6的寫法 function f x,y,z let args 0 1,2 f args array.from方法用於將兩類物件轉為真正的陣列 類似陣列的物件 array lik...

陣列的擴充套件

1.array.from 將類陣列物件轉換為陣列,將iterator介面的類陣列轉換為真正的陣列 它也可以接收乙個 函式,對陣列裡面的每乙個元素進行遍歷 可以用該方法輸出 獲取的dom集的每乙個dom元素的某個屬性或者文字內容 好方法!2.array.of 將一組值轉換為陣列 3.copywithi...

擴充套件型別 列舉型別

擴充套件型別 型別別名 列舉 介面 類。在型別約束位置,會產生重複 可以使用型別別名解決該問題 邏輯含義和真實的值產生了混淆,會導致修改真實的值的時候,產生大量的修改 字面量型別不會進入到編譯結果,比如我們想迴圈便利它的值,那麼就不行。所以需要使用列舉 enum gender gender.male...