一:傳統(tǒng)數組(靜態(tài)數組)的缺點
1:數組的長度必須事先指定,并且是常整數,不能是變量 int a[5];2:傳統(tǒng)數組程序員無法由程序員釋放,只能由系統(tǒng)釋放。(并且只能在數組所在函數結束才能釋放)3:數組的長度在函數運行期間不能動態(tài)的擴充和縮小4:A函數定義的傳統(tǒng)數組,在A函數結束時,在B函數中是不能使用的,因為已經釋放。也就是傳統(tǒng)數組不能跨函數。
區(qū)分:靜態(tài)存儲與內存的靜態(tài)開辟
二:為什么要動態(tài)分配內存
用來解決傳統(tǒng)數組的四個缺陷
三:動態(tài)內存分配舉例,以及動態(tài)數組的構造
方式:malloc函數,在堆開辟空間
1:malloc是由程序員在堆棧動態(tài)開辟空間2:返回值開辟空間的首地址,但是類型是void *,需要強制類型轉換3:分配的內存空間應該能整除類型所占的字節(jié)數4:包含頭文件malloc.h5:只能用free(p)來釋放p所指向的動態(tài)開辟的內存空間。6:對動態(tài)內存空間的操作,用*p來操作。7:可以用多個指針指向這個動態(tài)空間8:當有多個指針只向這個動態(tài)空間時,只能用free一個指針,多次重復釋放要被報錯9:可以將動態(tài)開辟的的內存指針作為函數參數
問題:p的分配類型是動態(tài)的還是靜態(tài)的?當調用free(p)后,p的內存空間會被釋放么?例子:動態(tài)構建一個一維數組:
動態(tài)擴充數組的長度,也就是在程序運行時動態(tài)擴充:realloc(首地址,總共字節(jié)數)
作用:將原來動態(tài)開辟的動態(tài)內存重新開辟一個字節(jié)數,如果這個數比以前的大,前面的數據保存。如果比原來的小,保留前面的數據。
注意:擴充或者縮放的內存單元是新開辟的內存單元。這個過程中有值的拷貝過程。返回值是新開辟的地址空間首地址。
四:靜態(tài)內存和動態(tài)內存的比較
靜態(tài)開辟的內存:在棧中開辟,由編譯器分配,由系統(tǒng)自動釋放動態(tài)開辟的內存:在堆中開辟,由程序員開辟,由程序員自動釋放。
五:跨函數使用內存的問題
-
C語言
+關注
關注
180文章
7604瀏覽量
136685 -
函數
+關注
關注
3文章
4327瀏覽量
62569 -
數組
+關注
關注
1文章
417瀏覽量
25939
原文標題:C語言動態(tài)內存分配基礎知識詳解
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論