溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

整理C知識(shí)點(diǎn)--動(dòng)態(tài)內(nèi)存分配

發(fā)布時(shí)間:2020-07-07 20:11:23 來源:網(wǎng)絡(luò) 閱讀:708 作者:No1Way 欄目:編程語言

為什么需要?jiǎng)討B(tài)分配內(nèi)存?
因?yàn)閯?dòng)態(tài)數(shù)組可以解決靜態(tài)數(shù)組的缺陷
(1).靜態(tài)數(shù)組長(zhǎng)度必須先指定,并且只能是常整數(shù),而且也不能為變量(長(zhǎng)度不能為不確定的數(shù))
(2).靜態(tài)數(shù)組,程序員無法手動(dòng)釋放內(nèi)存
(3).靜態(tài)數(shù)組確定后 無法更改(不能自主的擴(kuò)充或縮小)
(4).靜態(tài)數(shù)組不能跨函數(shù)調(diào)用

動(dòng)態(tài)內(nèi)存分配--動(dòng)態(tài)數(shù)組的構(gòu)造

e.g:
int *p = (int *)malloc(int Len);
//表達(dá)式左側(cè)是靜態(tài)分配的 占用4個(gè)字節(jié)(int),右側(cè)是動(dòng)態(tài)分配的,含有Len個(gè)字節(jié)

1.malloc只有一個(gè)int型參數(shù),表示要求系統(tǒng)分配的字節(jié)數(shù)
2.malloc函數(shù)的功能是請(qǐng)求系統(tǒng)分配Len個(gè)字節(jié)的內(nèi)存空間,如果分配成功則返回第一個(gè)字節(jié)地址,若不成功則返回NULL
malloc函數(shù)只能返回第一個(gè)字節(jié)的地址,把這個(gè)地址轉(zhuǎn)化為一個(gè)實(shí)際意義的地址,malloc前必須加(數(shù)據(jù)類型 *),表示把空類型轉(zhuǎn)化為對(duì)應(yīng)數(shù)據(jù)類型的地址

e.g:
int *p = (int *)malloc(50);
//表示把系統(tǒng)分配的50個(gè)字節(jié)的第一個(gè)字節(jié)轉(zhuǎn)化為int*型的地址,再準(zhǔn)確的說就是把第一個(gè)字節(jié)的地址轉(zhuǎn)化成4個(gè)字節(jié)的地址;
P指向第一個(gè)4字節(jié) P+1指向第2個(gè)地址 P[0]第一個(gè)元素 P[i]就是i+1個(gè)元素

動(dòng)態(tài)內(nèi)存的釋放
free(p);//表示把p指向的內(nèi)存釋放 P本身的內(nèi)存是靜態(tài)的

靜態(tài)內(nèi)存 和 動(dòng)態(tài)內(nèi)存比較
靜態(tài)內(nèi)存是由系統(tǒng)自動(dòng)分配的,由系統(tǒng)自動(dòng)釋放
靜態(tài)內(nèi)存是在棧分配的
整理C知識(shí)點(diǎn)--動(dòng)態(tài)內(nèi)存分配
動(dòng)態(tài)內(nèi)存是有程序員手動(dòng)分配的,由程序員手動(dòng)釋放
動(dòng)態(tài)內(nèi)存是在堆中分配的
(使用棧就象我們?nèi)ワ堭^里吃飯,只管點(diǎn)菜(發(fā)出申請(qǐng))、付錢、和吃(使用),吃飽了就
走,不必理會(huì)切菜、洗菜等準(zhǔn)備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自
由度小。
使用堆就象是自己動(dòng)手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由
度大。 (引用其他的大神的 有興趣的同學(xué)可以自行研究) )

跨函數(shù)使用內(nèi)存的問題(重點(diǎn))
靜態(tài)內(nèi)存不可以跨函數(shù)使用
所謂靜態(tài)內(nèi)存不可以跨函數(shù)使用的具體是:
靜態(tài)內(nèi)存在函數(shù)執(zhí)行期間 可以被其他函數(shù)使用
在執(zhí)行完畢之后就不能在被其他函數(shù)使用

動(dòng)態(tài)內(nèi)存可以跨函數(shù)使用
動(dòng)態(tài)內(nèi)存在函數(shù)執(zhí)行完畢之后仍可以被其他函數(shù)調(diào)用

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI