字串 串的堆分配儲存結構

2021-10-02 06:15:59 字數 1241 閱讀 6470

@adrian

串的堆分配儲存,其具體實現方式是採用動態陣列儲存字串。

通常,程式語言會將程式占有的記憶體空間分成多個不同的區域,程式包含的資料會被分門別類並儲存到對應的區域。拿 c 語言來說,程式會將記憶體分為 4 個區域,分別為堆區、棧區、資料區和**區,其中的堆區是本節所關注的。

與其他區域不同,堆區的記憶體空間需要程式設計師手動使用 malloc 函式申請,並且在不用後要手動通過 free 函式將其釋放。

c 語言中使用 malloc 函式最多的場景是給陣列分配空間,這類陣列稱為動態陣列。例如:

char * a = (char*)malloc(5*sizeof(char));
此行**建立了乙個動態陣列 a,通過使用 malloc 申請了 5 個 char 型別大小的堆儲存空間。

a = (char*)realloc(a, 10*sizeof(char));
通過使用這行**,之前具有 5 個 char 型儲存空間的動態陣列,其容量擴大為可儲存 10 個 char 型資料。

#include

#include

#include

intmain()

//合併兩個串到a1中

for(

int i = lengtha1;i < lengtha1+lengtha2;i++

)//串的末尾要新增\0,避免出錯

a1[lengtha1 + lengtha2]

='\0'

;printf

("%s"

,a1)

;//用完動態陣列要立即釋放

free

(a1)

;free

(a2)

;return0;

}

輸出結果:

注意:

程式中給 a1 和 a2 賦值時,使用了strcpy 複製函式。這裡不能直接用 a1 =「data.biancheng」,程式編譯會出錯,報錯資訊為 「沒有 malloc 的空間不能 free」。因為 strcpy 函式是將字串複製到申請的儲存空間中,而直接賦值是字串儲存在別的記憶體空間(本身是乙個常量,放在資料區)中,更改了指標 a1 和 a2 的指向,也就是說,之前動態申請的儲存空間雖然申請了,結果還沒用呢就丟了。

堆分配儲存結構的串

串在程式中是不可或缺的。char a abcd 就是乙個字串。學習串的目的就是為了對串進行操作。不過,編譯器已經有專門的庫來對串進行操作了。所以,我們可以利用這些庫,就不要造輪子了。我們學習了串,也就可以自己試著造個輪子來處理串啦!回到正題。串有三種表達方式 定長順序儲存,堆分配儲存,塊鏈儲存。這裡...

字串串池的好處

串池的特徵 內部的物件不可變。沒有重複物件。字串型別的變數,直接賦值,在使用串池的物件。串池中如果不存在,則建立物件,存在則直接引用。串池的缺陷 當串池中的物件數量過多,建立新物件效率低。串池中的物件越多,變數引用直接賦值效率變低。串池的優勢 節省空間,提公升效能,重複利用,盡可能的規範程式設計師對...

字串 堆分配基本操作

堆分配的儲存特點 1 依然是以一組位址連續的儲存單元存放串值字串行 2 儲存單元由動態分配 儲存結構typedef struct hstring 初始化 在這裡,使用for i 0,c chars c c i 這是乙個單獨的語句,沒有 塊。相當於for i 0,c chars c c i 但是在最開...