枚举---enum:它的本意就是列举事物,比如,颜色和性别,则代码为:
#include<stdio.h>
//枚举的示例:性别,颜色
enum sex//性别
{
MALE,
FEMALE,
SECRTY
};
enum clore//颜色
{
ROW,
BLUS,
GREEN
};
- 枚举在C语言中运用的比较多,这里就不过多的展开了,那么就来讲一讲,动态内存管理,这个就非常的重要的,它有四种函数:malloc,free,calloc,realloc。我们一一来介绍它们。
- 我们为什么要有动态内存分配呢?对于一般的C语言,我们需要向它申请一定的空间,才能存一个内存,这样就非常的麻烦,所以就有动态内存的分配,
- malloc函数:它的返回类型为void*,它的头文件:<stdlib.h>,它的表达式为:void* malloc(size_t size);。这个函数就可以向内存申请一块连续可用的空间。这个代码为:
#include<stdlib.h> int main() { //20个字节,存放5个整数 int* p = malloc(5 * sizeof(int)); if (p == NULL) { perror("malloc"); return 1; } //使用空间 int i = 0; for (i = 0; i < 5; i++) { *(p + i) = i = 1; printf("%d\n", p[i]); } return 0; }
这个就是malloc的使用。必须要有判断是否为NULL。
-
但是这个malloc还有一定的缺陷,要到最后,把空间的使用权限还给操作空间,那就需要free这个函数来实现,
-
free函数:它的表达式为:void free(void* ptr);,free是用来释放动态开辟的内存。比如,就拿malloc这个例子来说,它所对应的代码为:
//free的使用 int main() { //20个字节,存放5个整数 int* p = malloc(5 * sizeof(int)); if (p == NULL) { perror("malloc"); return 1; } //使用空间 int i = 0; for (i = 0; i < 5; i++) { *(p + i) = i = 1; } free(p);//此时p为野指针,传递free函数的是要释放的内存空间的起始地址。 p = NULL;//现在为空指针。 return 0; }
但是,这里一定不要改写成这个:如果是这个的话,则代码会崩掉。我们再写个代码巩固一下:
则代码为:
int main()
{
int num = 0;
scanf("%d", &num);
int arr[num] = { 0 };
int* ptr = NULL;
ptr = (int*)malloc(num * sizeof(int));
if (NULL != ptr)//判断ptr指针是否为空
{
int i = 0;
for (i = 0; i < num; i++)
{
*(ptr + i) = 0;
}
}
free(ptr);//释放ptr所指向的动态内存
ptr = NULL;//是否有必要?
return 0;
}
这个就充分展现了free的作用。
- 还有两个calloc和realloc我们下一章再讲,请尽请期待吧。