傳統(tǒng)數(shù)組的長度必須事先制定好,且只能是常整數(shù),不能是變量,長度一旦定義便不能再改變;其占用的內(nèi)存我們無法手動釋放,在一個函數(shù)運行間該函數(shù)眾的數(shù)組所分配到的空間知道函數(shù)運行完之后才會被釋放;其不能夠跨函數(shù)運行.
所以就出現(xiàn)了動態(tài)數(shù)組.動態(tài)數(shù)組很好的解決了傳統(tǒng)數(shù)組的這幾個缺陷.
舉個例子:
int *p=(int *)malloc(int size);
上面這個語句分配了兩片內(nèi)存,一片內(nèi)存是動態(tài)分配的總共size個字節(jié),另一片是靜態(tài)的.
malloc函數(shù)只有一個int類型的形參,表示的是分配的字節(jié)數(shù),malloc函數(shù)的作用就是請求size個字節(jié)的內(nèi)存空間,若成功便返回空間的地址,若失敗就會返回null.malloc函數(shù)能且只能返回一個第一個字節(jié)的地址,故我們需要把這個無任何實際意義的第一個字節(jié)的地址轉(zhuǎn)化為一個有實際意義的地址,比如:
int *p=(int *)malloc(100);
表示將非配好的100個字節(jié)的第一個字節(jié)地址轉(zhuǎn)化為int *類型的地址,這樣p就指向了第一個的四個字節(jié),p+1就指向了第二個四個字節(jié)...以此類推.
動態(tài)數(shù)組釋放內(nèi)存
freep(p)表示吧p所指向的內(nèi)存給釋放掉,而p自身的內(nèi)存是靜態(tài)的我們不能手動釋放,p本身的內(nèi)存只能在p變量鎖在的函數(shù)運行結(jié)束是系統(tǒng)自行釋放.
靜動態(tài)內(nèi)存的比較:
靜態(tài)內(nèi)存有系統(tǒng)自動分配,且由系統(tǒng)釋放;
靜態(tài)內(nèi)存是棧分配的
動態(tài)內(nèi)存是由開發(fā)者手動分配,手動釋放的;
動態(tài)內(nèi)存是堆分配的
咨詢熱線
010-85377344
135-21581588
微信客服
QQ客服
3026106565 點擊咨詢