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