malloc的全稱是memory allocation,中文叫動態內存分配,用於向系統申請分配指定字節的內存空間
原型:extern void *malloc(unsigned int num_bytes);
看原型很頭疼,來兩個例子:
*= ( *) malloc (()*);
*pd=( *) malloc (()*);
通過這2個聲明可以看出malloc的用法:
又是指針。malloc函數返回值類型為void *,但void* 類型可以強制轉換為任何其它類型的指針。相當於malloc可以返回任何類型的指針。
幾乎只要用到malloc的地方就要用到強制轉換,因為應該沒人會用一個void類型處理實際數據吧。
幾乎只要用到malloc的地方就要用到sizeof(),這個不用解釋。
即: 類型 *指針=(類型*) malloc ( sizeof(類型) );
這個原型看起來容易多了。
需注意的問題:
用malloc動態申請內存塊時,最好進行返回值的判斷。
分配失敗返回空指針NULL。
內存不再使用時,應使用free()函數將內存塊釋放。
建議養成強制轉換的習慣。
malloc 和 new 不同:
new 返回指定類型的指針,並且可以自動計算所需要大小。
malloc 則必須要由我們計算字節數,並且在返回後強行轉換為實際類型的指針。
例3:
stu *=( stu *)malloc(( stu));
套用上面的公式,我們可以方便的寫出自己的例子,例3先定義一個結構體指針pb,再分配一個結構體大小的內存空間,並把首地址賦給pb;
當我們使用鏈表時,用malloc分配空間將會非常實用。