C語言動態(tài)內(nèi)存申請


前言
上一章節(jié)主要是介紹指針基礎(chǔ),了解指針操作數(shù)組,指針與函數(shù)的關(guān)系。本章節(jié)主要介紹C語言指針操作堆內(nèi)存,簡單來說就是動態(tài)內(nèi)存申請。

C語言動態(tài)內(nèi)存申請
在C語言中,當(dāng)我們聲明變量時,內(nèi)存在棧的空間中分配。堆棧中分配的內(nèi)存在編譯時是固定的,一直保留到程序執(zhí)行結(jié)束。創(chuàng)建數(shù)組時,必須在聲明本身時指定大小,并且在程序執(zhí)行期間不能更改該大小。當(dāng)我們不知道要存儲在數(shù)組中的值的數(shù)量時,這是一個主要問題。為了解決這個問題,我們使用了動態(tài)內(nèi)存分配的概念。動態(tài)內(nèi)存分配從堆存儲中分配內(nèi)存。動態(tài)內(nèi)存分配定義:程序執(zhí)行期間的內(nèi)存分配稱為動態(tài)內(nèi)存分配,動態(tài)內(nèi)存分配是在程序執(zhí)行時手動分配內(nèi)存的過程。
我們使用預(yù)定義或標(biāo)準(zhǔn)庫函數(shù)來動態(tài)分配內(nèi)存。有
四個已知的作為標(biāo)題文件中定義的標(biāo)準(zhǔn)庫函數(shù)“stdlib.h中”。他們?nèi)缦?..
malloc()
calloc()
realloc()
free()
相關(guān)函數(shù)原型如下圖:


malloc函數(shù)
是用于分配指定字節(jié)數(shù)的內(nèi)存塊并返回void指針的標(biāo)準(zhǔn)庫函數(shù)??梢詫oid指針強(qiáng)制轉(zhuǎn)換為任何數(shù)據(jù)類型。如果malloc函數(shù)由于任何原因無法分配內(nèi)存,它將返回NULL指針。一級指針動態(tài)內(nèi)存申請


calloc函數(shù)
calloc是標(biāo)準(zhǔn)的庫函數(shù),用于分配指定字節(jié)數(shù)的多個內(nèi)存塊
并將其初始化為零。calloc()函數(shù)返回void指針。如果calloc函數(shù)由于任何原因無法分配內(nèi)存,則它將返回NULL指針。通常,calloc用于為數(shù)組和結(jié)構(gòu)體分配內(nèi)存。
calloc函數(shù)帶有兩個參數(shù)
要分配的塊數(shù)。
每個塊的大?。ㄒ宰止?jié)為單位)。
一級指針動態(tài)內(nèi)存申請,并初始化


realloc


free函數(shù)
free是用于解除分配先前使用malloc或calloc分配的內(nèi)存塊的標(biāo)準(zhǔn)庫函數(shù)。free函數(shù)返回void指針。當(dāng)free函數(shù)與使用calloc創(chuàng)建的已分配內(nèi)存一起使用時,將釋放所有塊。

注意點(diǎn):
手動申請的內(nèi)存都是需要手動釋放
同一塊內(nèi)存不能釋放兩次
釋放完后習(xí)慣于指針置空處理
從哪里申請從哪里釋放,指針做偏移時,釋放需還原

尾言
本章節(jié)作業(yè):用二級指針通過動態(tài)內(nèi)存申請的方式實(shí)現(xiàn)二級指針變?yōu)槎S數(shù)組的用法
落后了太多,只有拼命沖刺,就像跑步一樣,落后了好幾圈,只有拼了命

