數組比鏈表更加適于快速排序、查找和數據訪問。然而,數組通常是靜態數據結構。通用程序庫(stdlib.h)提供了另外兩個函數來動態分配內存,這兩個函數是calloc和realloc。這些函數可以用于創建和修改動態數組。數組指針可以像數組那樣使用下標。所以,calloc所創建的連續內存空間的指針可以像數組那樣處理。函數calloc動態為數組分配內存。
Calloc的原型是:
Void * calloc(size_t nmemb,size_t size);
函數有兩個參數,即元素的個數和每個元素的大小,并將數組的元素初始化為0,函數返回值指向已分配內存的指針,或者,如果沒有分配內存,則返回NULL指針。Malloc和calloc之間的主要差別在于,calloc清理它所分配的內存,而malloc不清理。
函數realloc修改前面對malloc、calloc或者realloc的調用而分配的對象大小。如果分配的內存大雨以前分配的數量,則不會修改原始對象的內容。否則,原對象中從起始位置到新對象大小的這一范圍內的內容不會發生變化,realloc的原則是:
Void * realloc(void * ptr,size_t size);
函數realloc有兩個參數,指向原始對象的指針和對象的新大小,如果ptr是NULL,則realloc的工作方式和malloc一樣。如果size是0,而ptr不是MULL,則釋放對象的內存,否則,如果ptr不是NULL,而大小大于0,則realloc試圖為對象分配新的內存塊,如不能分配新的空間,則ptr所指向對象將不會發生變化。函數realloc返回指向重新分配內存的指針,或者MULL指針。
來自里仁教育網:
http://www.lirenedu.org/index.php?ack=xinwen&id=1105