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

news2024/11/26 5:33:52

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1557353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找某数据在单链表中出现的次数

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct LinkNode {ElemType data;LinkNode* next; }LinkNode, * LinkList; //尾插法建立单链表 void creatLinkList(LinkList& L) {L (LinkNode*)mallo…

Vue系列——数据对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

本地项目上传到GitHub

本文档因使用实际项目提交做为案例&#xff0c;故使用xxx等字符进行脱敏&#xff0c;同时隐藏了部分输出&#xff0c;已实际项目和命令行输出为准 0、 Git 安装与GitHub注册 1&#xff09; 在下述地址下载Git&#xff0c;安装一路默认下一步即可。安装完成后&#xff0c;随便…

【面试经典150 | 动态规划】零钱兑换

文章目录 Tag题目来源解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 322. 零钱兑换 解题思路 方法一&#xff1a;动态规划 定义状态 dp[i] 表示凑成总金额的最少硬币个数。 状态转移 从小到大枚举要凑成的金额 i&#xff0c;如果当前…

电动车“锂”改“铅”屡被查?新国标或疏于考虑用户真实需求

最近几个月&#xff0c;电动自行车又走到了舆论中心。 “315期间”&#xff0c;不少媒体集中报道了超标电动自行车改装上牌事件。3月18日至20日&#xff0c;新华社推出电动自行车安全隐患系列调查&#xff0c;聚焦点之一就是改装超标问题。而在近段时间&#xff0c;综合媒体报…

MarTech调研总结整理

整体介绍 概念解释&#xff1a; Martech是一种智慧营销的概念&#xff0c;将割裂的营销&#xff08;Marketing&#xff09;、技术&#xff08;Technology&#xff09;与管理&#xff08;Management&#xff09;联系在一起&#xff0c;Martech将技术溶于全营销流程中&#xff0…

基于Java实验室预约管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

《操作系统导论》第14章读书笔记:插叙:内存操作API

《操作系统导论》第14章读书笔记&#xff1a;插叙&#xff1a;内存操作API —— 杭州 2024-03-30 夜 文章目录 《操作系统导论》第14章读书笔记&#xff1a;插叙&#xff1a;内存操作API1.内存类型1.1.栈内存&#xff1a;它的申请和释放操作是编译器来隐式管理的&#xff0c;所…

FebHost:意大利.IT域名一张意大利网络名片

.IT域名是意大利的国家顶级域名&#xff0c;对于意大利企业和个人而言,拥有一个属于自己的”.IT”域名无疑是件令人自豪的事。这个被誉为意大利互联网标志性代表的域名,不仅隐含着浓厚的意大利文化特色,还为使用者在当地市场的推广铺平了道路。 对于那些希望在意大利市场建立强…

2核4G服务器可以承载多少用户?卡不卡?

腾讯云轻量应用服务器2核4G5M配置性能测评&#xff0c;腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;并发数10&#xff0c;支持每天5000IP人数访问&#xff0c;腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线&#xff1f;并发数测试、CPU性能、内存性能、…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210&#xff0c;将在线训练的模型部署在K210&#xff08;代码后面给出&#xff09;上&#xff0c;能够识别卡皮巴拉水杯&#xff08;没错&#xff0c;卡皮巴拉&#xff0c;情绪稳定&#xff0c;真的可爱&#xff01;&#xff09;。数据集是用K210拍…

C语言例1-11:语句 while(!a); 中的表达式 !a 可以替换为

A. a!1 B. a!0 C. a0 D. a1 答案&#xff1a;C while()成真才执行&#xff0c;所以!a1 &#xff0c;也就是 a0 原代码如下&#xff1a; #include<stdio.h> int main(void) {int a0;while(!a){a;printf("a\n");} return 0; } 结果如…

数字化转型导师坚鹏:新质生产力发展解读、方法与案例

新质生产力发展解读、方法与案例 课程背景&#xff1a; 很多学员存在以下问题&#xff1a; 不知道如何理解新质生产力&#xff1f; 不清楚如何发展新质生产力&#xff1f; 不知道新质生产力发展案例&#xff1f; 课程特色&#xff1a; 有实战案例 有原创观点 有…

Linux课程____selinux模式

一、是什么 它叫做“安全增强型 Linux&#xff08;Security-Enhanced Linux&#xff09;”&#xff0c;简称 SELinux&#xff0c;它是 Linux 的一个安全子系统 二、有啥用 就是最大限度地减小系统中服务进程可访问的资源&#xff08;根据的是最小权限原则&#xff09;。避免…

leetcode:392. 判断子序列

题目&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {} }; 题解&#xff1a; 很巧妙的题解&#xff1a;循环遍历两个字符串&#xff0c;两个字符串都没遍完就继续遍历&#xff0c;字符串s先遍历完结果为true&#xff0c;字符串t先遍历完结果为…

2024第17届计算机设计大赛开始啦(保研竞赛)

中国大学生计算机设计大赛是面向高校本科生的竞赛&#xff0c;旨在培养创新型、复合型、应用型人才。2024年大赛的主题包括软件应用、微课与教学辅助等11个大类。参赛队由1&#xff5e;3名本科生组成&#xff0c;指导教师不多于2人。在组队和选题方面&#xff0c;强调团结协作和…

Linux学习记录18——用户的基本组、扩展组和文件的所有者、所属组之间的关系

一.学习的内容 经过前两次的学习&#xff0c;我对文件的所有者和所属组的概念不是很清晰。即什么才是文件的所有者&#xff1f;什么才是文件的所属组&#xff1f;它俩和用户的基本组、扩展组有联系吗&#xff1f;文件的所有者、所属组和其他用户都对文件有相应的rwx权限&#x…

双端队列的插入与删除操作的实现及其时间复杂度分析

双端队列(deque,全称为double-ended queue)是一种支持在两端插入和删除元素的数据结构。与栈和队列不同,双端队列提供了更加灵活的操作方式。在实现双端队列时,我们可以采用数组作为底层数据结构,以保证插入和删除操作的时间复杂度为O(1)。 一、双端队列的基本概念 双…

Vue3 + Vite + TS + Element-Plus + Pinia创建新项目(1)

1、cmd进入命令行后&#xff0c;输入npm create vite 2、使用vs code打开文件夹 3、在VS Code的终端里面输入命令&#xff1a;npm i 安装依赖 4、安装依赖库 npm i vue-router 路由安装 npm i pinia 全局状态管理 npm i axios 请求库 npm i element-p…

Matlab之提高交叉定位点的定位精度

通过测向交叉定位的方法&#xff0c;按理只需2根测向线即可得出定位点的位置。但由于误差的存在&#xff0c;求出的定位点位置存在一定的偏差。为了得到更加精确的定位点位置&#xff0c;需要对定位点进行冗余测量&#xff0c;从而得到多个定位点&#xff0c;然后通过定位点估计…