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