和malloc()类似,在ANSI之前,calloc()也返回指向char的指针;在ANSI之后,返回指向void的指针。如果要储存不同的类型,应使用强制类型转换运算符。calloc()函数接受两个无符号整数作为参数(ANSI规定是size_t类型)。第1个参数是所需的存储单元数量,第2个参数是存储单元的大小(以字节为单位)。calloc()函数还有一个特性:它把块中的所有位都设置为0(注意,在某些硬件系统中,不是把所有位都设置为0来表示浮点数0)。free()函数也可用于释放calloc()分配的内存。动态内存分配是许多高级程序设计技巧的关键。有些编译器可能还提供其他内存管理函数,有些可以移植,有些不可以。
示例
//Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> //malloc()、free() #include <stdlib.h> //argc: 参数个数 argv[]: 参数数组 //int main(int argc, char **argv) int main(int argc, char *argv[]) { long * newmem; newmem = (long *)calloc(10, sizeof(long)); for (int i = 0; i < 10; i++) newmem[i] = i; for (int i = 0; i < 10; i++) printf("%ld ", newmem[i]); putchar('\n'); for (int i = 0; i < 10; i++) *(newmem + i) = i + 10; for (int i = 0; i < 10; i++) printf("%ld ", newmem[i]); free(newmem); putchar('\n'); system("pause"); return 0; }