您好,登錄后才能下訂單哦!
為什么需要動態分配內存?
因為動態數組可以解決靜態數組的缺陷
(1).靜態數組長度必須先指定,并且只能是常整數,而且也不能為變量(長度不能為不確定的數)
(2).靜態數組,程序員無法手動釋放內存
(3).靜態數組確定后 無法更改(不能自主的擴充或縮小)
(4).靜態數組不能跨函數調用
動態內存分配--動態數組的構造
e.g:
int *p = (int *)malloc(int Len);
//表達式左側是靜態分配的 占用4個字節(int),右側是動態分配的,含有Len個字節
1.malloc只有一個int型參數,表示要求系統分配的字節數
2.malloc函數的功能是請求系統分配Len個字節的內存空間,如果分配成功則返回第一個字節地址,若不成功則返回NULL
malloc函數只能返回第一個字節的地址,把這個地址轉化為一個實際意義的地址,malloc前必須加(數據類型 *),表示把空類型轉化為對應數據類型的地址
e.g:
int *p = (int *)malloc(50);
//表示把系統分配的50個字節的第一個字節轉化為int*型的地址,再準確的說就是把第一個字節的地址轉化成4個字節的地址;
P指向第一個4字節 P+1指向第2個地址 P[0]第一個元素 P[i]就是i+1個元素
動態內存的釋放free(p);//表示把p指向的內存釋放 P本身的內存是靜態的
靜態內存 和 動態內存比較
靜態內存是由系統自動分配的,由系統自動釋放
靜態內存是在棧分配的
動態內存是有程序員手動分配的,由程序員手動釋放
動態內存是在堆中分配的
(使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就
走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自
由度小。
使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由
度大。 (引用其他的大神的 有興趣的同學可以自行研究) )
跨函數使用內存的問題(重點)
靜態內存不可以跨函數使用
所謂靜態內存不可以跨函數使用的具體是:
靜態內存在函數執行期間 可以被其他函數使用
在執行完畢之后就不能在被其他函數使用
動態內存可以跨函數使用
動態內存在函數執行完畢之后仍可以被其他函數調用
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。