枚举--enum和动态内存管理(malloc和free)

枚举---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我们下一章再讲,请尽请期待吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值