2025_2_3 C语言中关于枚举类型,动态内存分配

devtools/2025/2/4 16:28:08/

1.枚举类型

枚举类型是用来表示一些离散值的
枚举常量默认从0开始,依次递增1

typedef enum{s1,s2,s3,s4
}num;

以上:s1=0,s2 = 1, s3 = 2, s4 = 3
可以为枚举常量显式指定值

typedef enum{s1 = 1,s2 = 2,s3 = 3,s4 = 4
}num;

枚举常量的调用有两种方法

  1. 直接使用枚举量
  2. 创建枚举类型变量来使用枚举量
typedef enum {s1 = 1,s2 = 2,s3 = 3,s4 = 4
}num;
int main() {//通过枚举变量调用num n1 = s1;printf("%d\n", n1);//直接使用枚举常量printf("%d\n", s2);return 0;
}

2.动态内存分配

动态内存分配的空间都是堆上的,分配出来的空间都需要手动销毁,所以最好分配大一点的空间,不然会降低效率。
动态内存分配是全局的,所以在函数中创建了动态分配的内存就不用加static也可以返回。
一般是字符串,数组,结构体才需要动态内存分配
可以使用三个函数进行动态内存分配,这三个函数都存放在<stdlib.h>

在这里插入图片描述
在动态内存分配完过后一定要判断是否成功,不然会出问题

int main() {int n = 10;int* a = (int*)malloc(sizeof(int) * n);//开辟十个内存空间大小的int型数组if (a == NULL) {printf("error");exit(1);}return 0;
}

题目:创建一个自动扩容的数组

vector.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#define SIZE 8
#define DEFAULT_GROW_CAPACITY 1024
//创建一个自动扩容的数组
typedef struct {int* elements;//指向推空间的数组int size;//元素个数int capacity;//数组容量
}vector;//创建结构体变量
vector* create();
//销毁
void destory_vector(vector* v);
//填充数组元素
void push_back(vector* v, int val);
//展示元素
void show_vector(vector* v);

voctor.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"vector.h"vector* create() {vector* v = (vector*)malloc(sizeof(vector));if (v == NULL) {printf("create faild in vector.c");exit(1);}v->elements = (int*)malloc(sizeof(int) * SIZE);if (v->elements == NULL) {printf("create v->elements faild in vector.c");free(v);//v已经创建成功exit(1);}v->size = 0;v->capacity = SIZE;return v;
}//销毁
void destory_vector(vector* v) {free(v->elements);free(v);
}//扩容
void grow_capacity(vector* v) {//如果capacity低于默认阙值,就扩容两倍,高于就扩容1.5倍if (v->capacity <= DEFAULT_GROW_CAPACITY) {v->capacity += v->capacity;}else {v->capacity += v->capacity / 2;}//创建扩容临时存储空间int* result = realloc(v->elements, sizeof(int) * v->capacity);if (result == NULL) {printf("grow_capacity faild in vector.c");free(v->elements);free(v);exit(1);}//将该空间给要被扩容的空间v->elements = result;
}//填充数组元素
void push_back(vector* v, int val) {if (v->size == v->capacity) {//扩容grow_capacity(v);}v->elements[v->size++] = val;//别忘了++
}//展示元素
void show_vector(vector* v) {for (int i = 0; i < v->size; i++) {printf("%d ", v->elements[i]);}
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"vector.h"int main() {vector* v = create();if (v == NULL) {printf("create faild");exit(1);}for (int i = 0; i < 100; i++) {push_back(v, i);}show_vector(v);destory_vector(v);return 0;
}

http://www.ppmy.cn/devtools/156054.html

相关文章

15 刚体变换模块(rigid.rs)

rigid.rs是一个表示三维刚体变换&#xff08;Rigid Transformation&#xff09;的结构体定义&#xff0c;用于在计算机图形学、机器人学以及物理模拟等领域中表示物体在三维空间中的旋转和平移。在这个定义中&#xff0c;所有长度在变换后都保持不变&#xff0c;这是刚体变换的…

Qt文件操作

目录 一、文件操作相关类 1.QFile 2.QFileInfo 3.QTextStream 4.QDataStream 5.QDir 6.QFileSystemWatcher 7.QTemporaryFile 二、文件操作示例 1.文本文件操作 2.目录操作 3.二进制文件操作 一、文件操作相关类 1.QFile QFile类用于文件的创建、读写、复制、删除…

Python面试宝典13 | Python 变量作用域,从入门到精通

今天&#xff0c;我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。 什么是变量作用域&#xff1f; 简单来说&#xff0c;变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 &#xff08;1&#xff09;系统首页 &#xff…

JVM-运行时数据区

JVM的组成 运行时数据区-总览 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 运行时数据区-应用场景 Java的内存分成哪几部分&#xff1f; Java内存中哪些部分会内存溢出&#xff1f; JDK7 和J…

如何解决云台重力补偿?

如何解决云台重力补偿? 最近在调试步兵云台的时候,由于枪管、图传、摄像头等重力的原因,pitch轴的参数尤其难以调整,又不想抬升和降低使用两套不同的参数,所以使用了重力补偿,效果也是比较理想的,于是整理为一篇文章记录一下 一、问题根源:枪管重力在“搞事情” 想象…

SpringBoot 配置文件

目录 一. 配置文件相关概念 二. 配置文件快速上手 1. 配置文件的格式 2. properties 配置文件 (1) properties 基本语法 (2) 读取配置文件内容 (3) properties 缺点分析 3. yml配置文件 (1) yml 基本语法 (2) 读取配置文件内容 (3) yml 配置对象 (4) yml 配置集合 …

【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …