16 從零開始學習C語言 動態記憶體分配

2021-06-17 22:55:19 字數 961 閱讀 9934

陣列的缺陷:

1、陣列長度必須事先定義,只能為常整數,定義後無法更改;

2、陣列占用記憶體,無法手動釋放,直到陣列所在函式執行完畢;

3、函式內的陣列,一旦函式執行完畢後,則不能在其它函式中使用,即陣列不能跨函式使用;

其實,陣列所存在的問題就是靜態記憶體的問題,通過動態分配陣列可以很好的解決上述問題。

malloc函式:

函式名:malloc

標頭檔案:malloc.h

功能:記憶體分配

用法:(void*)malloc(unsigned size);

例子:int *p = (int*)malloc(4)

構造動態一維陣列:

int *p = (int*)malloc(len);len是個int型變數。

請求系統分配len個位元組的記憶體空間,並把空間第乙個位元組的記憶體位址轉化成int型位址,然後賦給p。

結合陣列下標和指標的概念,就相當於動態造了乙個名為p,長度為len/4的int型陣列(因為int型占個4個位元組,所以長度為len/4)。

補:把第乙個記憶體位址轉化成int型,就表示第乙個記憶體位址指向了連續的4個位元組(因為int型佔4個位元組),賦值給p後,p就指向第乙個連續的4個位元組,p+1指向第二個的4個位元組,換句話說就是把這段空間按四個位元組為單位劃分,每四個位元組中的第乙個位元組的記憶體位址就指向它所在的四個位元組,這同樣也是下標的本質。

靜態記憶體與動態記憶體的比較:

靜態記憶體由系統自動分配,由系統自動釋放,靜態記憶體是在棧中分配的。

動態記憶體由程式設計師手動分配,手動釋放(所以要注意記憶體洩露),動態記憶體是在堆中分配的。

調整已分配動態記憶體大小:

函式名:realloc

標頭檔案:malloc.h

功能:重新分配記憶體

用法:(void*)relloc(void* ptr, unsigned size)

例子:int *p = (int*)realloc(p, 100);

從零開始學習c語言

including 進行相關的預處理操作 include稱為檔案包含命令 而 中為頭部檔案 首檔案 int main int 是c語言基本資料型別之一,main函式是乙個程式的入口部分,printf hello,world n printf是產生格式化輸出的函式 輸出函式 想控制台輸出文字 字元,n...

C 從零開始學習

首先你需要乙個編譯器,在這裡我首先是推薦功能強大的visual studio最強ide。vs 可以嘗試自己在ide裡面敲一下,畢竟只有多動手才能成功!include 此為標頭檔案 using namespace std 告訴編譯器使用 std 命名空間。main方法為主函式,是程式開始執行的地方 i...

從零開始學C語言

從零開始學c語言 閬苑祁寒 更新說明 此版本是最終版本。初始版本有關helloworld的內容調到了附錄部分。寫在前面 本文從乙個初學者的角度,給出了對c語言的簡單理解。最近一次更新調整了之前的敘述方式。目錄part1 從hello world講起 part2 知識結構梳理 part3 一路走來的習...