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