欧美极品一区二区三区在线-欧美一区二区三区色呦视频-小泽马丽亚在线观看免费-中文字幕婷婷日韩欧美亚洲-日本放荡的熟妇在线-久久久久亚洲av无码专区网站-亚洲黄片久久久久久久久久久久-综合久久av一区二区三区-亚洲精品色一区二区三区

網(wǎng)站開(kāi)發(fā) APP開(kāi)發(fā) 小程序開(kāi)發(fā) SEO優(yōu)化 公司新聞

C語(yǔ)言--數(shù)組動(dòng)態(tài)分配內(nèi)存

2018-05-30 09:25:24
2206

  傳統(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)存是堆分配的

?