游戏筑基开发之动态数组(C语言)
利用结构体以及指针的相关知识创建动态整型数组
主要功能包括: 初始化动态数组、释放动态数组、插入数据在动态数组尾部、指定下标删除数据(从0开始)、指定下标更新数据、打印动态数组等。
该动态数组根据将根据使用者动态扩容。初始大小:10个整型大小。
数据结构如下:
// 动态数组
typedef struct tagVector
{int* pArr;//存储数据int nLen;//当前长度int nLenMax;//最大长度
}TVector, *PTVector;
具体实现如下:
#include <stdio.h>
#include <memory.h>// 动态数组
typedef struct tagVector
{int* pArr;int nLen;int nLenMax;
}TVector, *PTVector;// 初始化动态数组
static int VectorInit(PTVector* ppv)
{// 创建一个结构体,在堆区PTVector pv = malloc(sizeof(TVector));//PTVector pv = malloc(sizeof(TVector));pv->nLen = 0;pv->nLenMax = 10;// 申请一个长度为pv->nLenMax的int内存空间pv->pArr = malloc(sizeof(int) * pv->nLenMax);// 返回创建的动态数组结构体*ppv = pv;return 1;
}// 释放指针
static int VectorFree(PTVector *ppv)
{//free(pv);pv = NULL;if (*ppv == NULL)return 0;free((*ppv)->pArr);free(*ppv);*ppv = NULL;return 1;
}// 插入数据在尾部
static int VectorInsert(PTVector pv,int data)
{if (pv == NULL)return 0;if (pv->nLen + 1 == pv->nLenMax){pv->nLenMax *= 5;int *temp = malloc(sizeof(int)*(pv->nLenMax));memcpy(temp, pv->pArr, sizeof(int)*((pv->nLenMax)/5));//无条件复制free(pv->pArr);pv->pArr = temp;temp = NULL; }/*(*(pv->pArr + pv->nLen)) = data;pv->nLen++;*/(pv->pArr)[pv->nLen++] = data;return 1;
}// 删除指定下标
static int VectorDelete(PTVector pv,int index)
{if (pv == NULL || pv->nLen < index + 1)return 0;for (int i = index; i < pv->nLenMax - 2; i++)pv->pArr[i] = pv->pArr[i + 1];pv->nLenMax--;
}// 更新指定下标数据
static int VectorUpdate(PTVector pv, int index,int data)
{if (pv == NULL || pv->nLen < index + 1)return 0;pv->pArr[index] = data;return 1;
}// 打印数据
static void VectorPrint(PTVector pv)
{for (int i = 0; i < pv->nLen; i++)printf("%3d", pv->pArr[i]);printf("\n");
}int main()
{PTVector pv = NULL;VectorInit(&pv);//传入二级指针int count = 0;//测试用例while (1){VectorInsert(pv, 6 + count);if ((count++) == 12)break;}VectorPrint(pv);printf("\n");VectorUpdate(pv, 4, 100);VectorPrint(pv);return 0;
}
关于mencpy的详情介绍【点击跳转】
游戏筑基开发之动态数组(C语言)相关推荐
- C语言编程输入动态数组,C语言完美实现动态数组代码分享
我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量. 这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源. 请实现一个简单的动态数组,能够随时改变大小, ...
- c语言如何生成字符型动态数组,C语言构建动态数组完整实例
C语言构建动态数组完整实例 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; ...
- c语言 动态数组_C语言的学习笔记!助你一路成长!
1.C语言中函数参数传递是按照"值传递"进行的,即单向传递. 2.函数原型:函数类型 函数名(参数类型,参数类型--),可以不必加参数名,因为操作系统不检查参数名. 3.数组作为实 ...
- c语言 头文件定义数组,C语言动态数组
动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标:当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小. 中文名 C语言动态数组 释 义 相对于静态 ...
- C语言中动态数组的作用,C语言实现动态数组
前言 在纯C语言编程中,数组的创建必须是固定的大小,因为C语言本身没有提供动态数组这种数据结构,这是一个让习惯了使用高级语言编程的人转做C开发面临的一个很头疼的问题,本篇文章就将介绍如何使用纯C语言编 ...
- C语言动态数组建立方法
动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标:当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小.使用动态数组的优点是可以根据用户需要,有效利用存储 ...
- 易语言游戏辅助开发原理分析
外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂.比如模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵:还有修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于 ...
- C语言——动态数组的创建和使用
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构
我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...
- c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...
<数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt>由会员分享,可在线阅读,更多相关<数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt(32页珍藏版)> ...
最新文章
- Ant Design Pro 登录流程以及路由权限设置
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
- linux df 目录大小,Linux命令du df查看文件和文件夹大小
- 历史上最简单的一道Java面试题,但无人能通过
- 使用 ApplicationLoader 上传应用到 Appstore
- 近视手术─医学界的一个阴谋? !
- python创建maven工程_Maven项目
- 动态注册广播接收者,屏幕锁定Android
- ubuntu 18.04 安装 LNMP后,nginx 和 apachae 冲突
- win7修复计算机卡了,Win7修复漏洞补丁后系统变卡的原因和解决方法
- PS去掉图片上的文字
- linux系统中 为mysql还原数据库_linux中mysql还原数据库命令
- 生命细胞游戏的C++实现
- vue+element实现一个excel表格下载的功能
- windos下 elasticksearch7.13安装踩坑记
- python ppt自动生成_实战 | Python自动生成PPT调研报告
- 【算法导论-主定理】用主方法求解递归式 学练结合版
- 简述防火墙--未知危险的屏障
- 【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法
- 【数据集分析】KEEL的鸢尾花(Iris)
热门文章
- TF2.0—tf.keras.layers.Lambda
- Java网络编程之服务端中的Socket
- Oracle注入点信息基本检测
- CSDN《程序员》杂志创始人蒋涛-推荐《程序员职场第一课》
- 深度学习:卷积神经网络CNN变体
- new,malloc,GlobalAlloc详解
- cmk聪明客机器人餐厅_住了10年的老房大改造,45客餐厅全开放,更有整面大衣柜,高级又实用!...
- 详细设计 存储分配_【存储论文笔记】Windows Azure Storage
- byte 类型_Go 语言string 也是引用类型
- mysql 大小限制_MYSQL 表大小限制