一、c語言動態記憶體分配
要實現動態記憶體的分配,除了利用含指標成員的結構體之外,還需利用c語言提供的幾個標準庫函式。(使用時應包含標頭檔案「alloc.h」或「malloc.h」或「stdlib.h」)
1.malloc函式
函式原型為void *malloc(unsigned int size);在記憶體的動態儲存區中分配一塊長度為"size" 位元組的連續區域。函式的返回值為該區域的首位址。 「型別說明符」表示把該區域用於何種資料型別。(型別說明符*)表示把返回值強制轉換為該型別指標。「size」是乙個無符號數。例如: pc=(char *) malloc (100); 表示分配100個位元組的記憶體空間,並強制轉換為字元陣列型別,函式的返回值為指向該字元陣列的指標, 把該指標賦予指標變數pc。若size超出可用空間,則返回空指標值null。
2.calloc 函式
函式原型為void *calloc(unsigned int num, unsigned int size)
按所給資料個數和每個資料所佔位元組數開闢儲存空間。其中num為資料個數,size為每個資料所佔位元組數,故開闢的總位元組數為num*size。函式返回該儲存區的起始位址。calloc函式與malloc 函式的區別僅在於一次可以分配n塊區域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu型別,並把其首位址賦予指標變數ps。
3. realloc函式:
函式原型為void *realloc(void *ptr, unsigned int size)
重新定義所開闢記憶體空間的大小。其中ptr所指的記憶體空間是用前述函式已開闢的,size為新的空間大小,其值可比原來大或小。函式返回新儲存區的起始位址(該位址可能與以前的位址不同)。例如p1=(float *)realloc(p1,16);將原先開闢的8個位元組調整為16個位元組。
**動態申請的記憶體空間要進行手動用free()函式釋放
4. free函式:
函式原型為void free(void *ptr)
將以前開闢的某記憶體空間釋放。函式原型為 void free(void *ptr)其中ptr為存放待釋放空間起始位址的指標變數,函式無返回值。應注意:ptr所指向的空間必須是前述函式所開闢的。例如free((void *)p1);將上例開闢的16個位元組釋放。可簡寫為free(p1);由系統自動進行型別轉換。
二、c++語言動態記憶體分配
c++語言中用new和delete來動態申請和釋放記憶體。
1. 申請單個物件
int *p;
p=new int;或者 p=new int(value);
2. 動態申請陣列
int *p;
p=new int [100];
這樣可以申請長度為100的陣列,但是不能進行初始化。
3. delete
int *p, *q;
p=new int;
q=new int[10];
delete p;
delete [ ]q;
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...