天天看點

動态記憶體開辟函數

    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);由系統自動進行類型轉換。

繼續閱讀