C语言的内存分配calloc()函数
C语言的内存分配除了用malloc()
函数,还可以用calloc()
函数,典型的用法如下:
long * newmem;
newmem = (long *)calloc(100,sizeof(long));
和malloc()
类似,在ANSI之前,calloc()
也返回指向char
的指针;在ANSI之后,返回指向void
的指针。如果要存储不同的类型,应私用强制类型转换运算符。calloc()
函数接受两个无符号整数作为参数(ANSI规定是size_t类型)。 第一个参数是多续的存储单元的数量,第二个参数是存储单元的大小(以字节为单位)。在该例中,long
为4个字节,所以前面的代码创建了100个4字节的存储单元,总共400个字节。
用sizeof(long)
而不是4,提高了代码的可移植性。这样,在其他long不是4字节的系统也能正常工作。
calloc()函数还有一个特性:它把块中所有为都设置为0(注意,在某些硬件系统中,不是把所有为都设置为0来表示浮点数0)。
free()函数也可以用于释放calloc()分配的内存。
动态内存分配是许多高级程序设计技巧的关键。有些编译器还提供其他内存管理函数,有些可以移植,有些不可以,这需要注意。
参考资料:
史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.