?在C语言中如果只是单纯的使用数组来创建变量,这个数组中的变量的存放在栈中,在计算机中就固定的内存的空间,就不能在程序运行的时候动态地增加或者减少内存。所以一般都会去使用动态分配内存。
c语言中,动态管理内存的主要的是下面四个,分别是:malloc ,calloc , free,realoc。
malloc 的使用方法:
int* p = (int*)malloc(10 * sizeof(int));//代表创建十个变量的整形数组
malloc只有一个参数,参数代表动态开辟多少字节的内存。malloc会返回一个void类型的指针,因为动态数组的类型是int类型的,所以这里使用 (int*) 来将强制类型转换为整型指针。
free的使用方法:
free(p);
p = NULL;
要注意,要释放指针p所指向的内存,首先要将指针p执行 free(p) 。然后将指针p 置为空。
以及一般动态开辟内存后都要将内存释放。一般 free 和malloc 都是成对出现的。
calloc的使用方法:
int* p = (int*)malloc(10,sizeof(int));
使用方式大致和malloc是相同的,但是calloc会自动初始化为0。
realloc的使用方法:
realloc函数的出现让动态内存管理更加灵活,在有时候发现申请的空间太小或者太大,用realloc来进行调整。
int* p = (int*)malloc(10 * sizeof(int));
//将 p 所指向的空间进行扩容
int* t = (int*)realloc(p,20 * sizeof(int));
if(t != NULL)
{
p = t;
}
要注意,在使用realloc函数的时候,realloc函数有可能会返回一个NULL,所以如果直接将realloc的返回值赋值给 p 有可能会导致 p 原来所指向的空间丢失。
realoc也可以实现malloc的功能:
int* p = (int*)realloc(NULL,10 * sizeof(int));
补:用c语言动态管理就可以很好地实现一个通讯录的编写。
|