@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 但是在最開...