malloc函数
原型:extern void* malloc(unsigned int size);功能:动态分配内存;注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:"长度 * sizeof(数据类型)";
示例

//动态分配内存,输入5个数据,并把低于60的值打印出来#include <stdio.h>#include <stdlib.h>int main(){ int *ptr = (int *)malloc(5 * sizeof(int));//分配内存 for (int i = 0; i < 5; i++) { scanf_s("%d", &ptr[i]);//输入数据 } int min = 60; for (int i = 0; i < 5; i++) { if (min > *(ptr + i)) printf("%5d", *(ptr + i));//打印出低于60的值 } free(ptr); system("pause"); return 0;}free函数原型:void free(void * ptr);功能:搭配malloc()函数,释放malloc函数申请的动态内存;注意:对于free(ptr),若ptr为NULL,则可进行多次释放,若ptr是非空指针,则free对ptr只能进行一次操作,否则程序将崩溃;示例:见malloc函数;结果:见malloc函数;


realloc函数原型: void realloc(void ptr,unsigned int size);功能:先判断当前指针是否有足够的连续空间,若足够,扩大ptr指向的地址并返回,若不够,怎按size指定的大小分配空间,将原数据copy到新分配的内存中,然后释放原ptr所指向区域;注意:内存使用完毕后,应使用free()函数释放,但原来的指针是自动释放,不需要使用free;
示例:

#include <stdio.h>#include <stdlib.h>int main(){ char *str; /* 一开始的内存分配 */ str = (char *)malloc(15); strcpy(str, "Hello World!"); printf("String = %s\n", str); /* 重新分配内存 */ str = (char *)realloc(str, 25); strcat(str, ", C"); printf("String = %s\n", str); free(str); system("pause"); return 0;}calloc函数原型:void* calloc(unsigned int num,unsigned int size);功能:为已经分配的内存重新分配空间并复制内容;注意:num:对象个数,size:对象占据的内存字节数,相较于malloc函数,calloc函数会自动将内存初始化为0;


示例:

#include <stdio.h>#include <stdlib.h>int main(){ int num; int i; int *ptr; printf("元素个数为:"); scanf("%d", &num); ptr = (int*)calloc(num, sizeof(int)); printf("输入 %d 个数字:\n", num); for (i = 0; i < num; i++) { scanf("%d", &ptr[i]); } printf("输入的数字为:"); for (i = 0; i < num; i++) { printf("%d ", ptr[i]); } printf("\n"); system("pause"); return 0;}