C語言函式
C語言允許建立記憶體動態分配區域,以存放一些臨時用的數據,這些數據不必在程式的聲明部分定義,也不必等到函式結束時才釋放,而是需要時隨時開闢,不需要時隨時釋放。C語言中,記憶體的動態分配是通過系統提供的庫函式來實現的,主要有malloc、calloc和 free 函式。
malloc 函式
其函式原型為
void *malloc(unsigned int size);
其作用是在記憶體的動態存儲區中分配一個長度為size的連續空間。此函式的返回值是分配區域的起始地址,或者說,此函式是一個指針型函式,返回的指針指向該分配域的開頭位置。如:
malloc(100);/*開闢 100 個位元組的臨時分配域,返回值為其第一個位元組的地址*/
注意指針的基類型為 void,即不指向任何類型的數據,只提供一個地址。如果此函式未能成功的執行(例如記憶體空間不足),則返回空指針(NULL)。
calloc函式
函式原型為
void *calloc(unsigned n, unsigned size)
其作用是在記憶體的動態存儲區中分配n個長度為 size 的連續空間。函式返回一個指向分配區域的起始位置的指針;如果分配不成功,則返回NULL。
採用 calloc 函式可以為一維數組開闢動態存儲空間,n 為數組元素個數,每個元素長度為 size,這就是動態數組。如:
p = calloc(50,4) /*開闢 50*4個位元組的臨時分配域,把起始地址賦給指針變數p */
free 函式
函式原型為
void free(void*p);
其作用是釋放指針 p 所指向的動態空間,使這部分空間能被其他變數使用。p 是最近一次調用 calloc 或malloc 函式時的返回值。free函式無返回值。如:
free(p);/*釋放指針變數p指向的已分配的動態空間*/
上述三個函式在頭檔案malloc.h和 stdlib.h 中定義。若要使用,必須在程式的開始將頭檔案用檔案包含命令放到本檔案中來。
函式運算符
new
運算符new用於向系統申請動態存儲空間,並把首地址作為運算結果,它的使用形式為:
指針變數=new 數據類型;
例如:
int *p=new int
該語句的作用是會用new從記憶體中申請了一個int型變數(4個位元組),並將該變數的首地址賦給指針變數p。
new所建立的變數的初始值是任意的,也可在用new分配記憶體的同時進行初始化。使用形式為:
指針變數=new 數據類型(初始值)。
delete
堆記憶體可按照要求進行分配,程式對記憶體的需求量隨時會發生變化,有時程式在運行種可能會不再需要由new分配的記憶體空間,而且程式還未運行結束,這時就需要把先前占用的記憶體空間釋放給堆記憶體,以後重新分配,供程式的其他部分使用。運算符delete用於釋放new分配的記憶體空間,刪除建立的對象,它的使用形式為:
其中的指針變數中保存著new分配的記憶體的首地址。