利用结构体以及指针的相关知识创建动态整型数组

主要功能包括: 初始化动态数组、释放动态数组、插入数据在动态数组尾部、指定下标删除数据(从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语言)相关推荐

  1. C语言编程输入动态数组,C语言完美实现动态数组代码分享

    我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量. 这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源. 请实现一个简单的动态数组,能够随时改变大小, ...

  2. c语言如何生成字符型动态数组,C语言构建动态数组完整实例

    C语言构建动态数组完整实例 本文以一个完整的实例代码简述了C语言构建动态数组的方法,供大家参考,完整实例如下: #include #include int main(void) { int len; ...

  3. c语言 动态数组_C语言的学习笔记!助你一路成长!

    1.C语言中函数参数传递是按照"值传递"进行的,即单向传递. 2.函数原型:函数类型 函数名(参数类型,参数类型--),可以不必加参数名,因为操作系统不检查参数名. 3.数组作为实 ...

  4. c语言 头文件定义数组,C语言动态数组

    动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标:当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小. 中文名 C语言动态数组 释    义 相对于静态 ...

  5. C语言中动态数组的作用,C语言实现动态数组

    前言 在纯C语言编程中,数组的创建必须是固定的大小,因为C语言本身没有提供动态数组这种数据结构,这是一个让习惯了使用高级语言编程的人转做C开发面临的一个很头疼的问题,本篇文章就将介绍如何使用纯C语言编 ...

  6. C语言动态数组建立方法

    动态数组是指在声明时没有确定数组大小的数组,即忽略圆括号中的下标:当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小.使用动态数组的优点是可以根据用户需要,有效利用存储 ...

  7. 易语言游戏辅助开发原理分析

    外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂.比如模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵:还有修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于 ...

  8. C语言——动态数组的创建和使用

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  9. c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构

    我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...

  10. c语言不允许对数组的大小做动态定义,数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt...

    <数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt>由会员分享,可在线阅读,更多相关<数组,C语言程序设计课件,与中南大学出版社教材相配套.ppt(32页珍藏版)> ...

最新文章

  1. Ant Design Pro 登录流程以及路由权限设置
  2. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
  3. linux df 目录大小,Linux命令du df查看文件和文件夹大小
  4. 历史上最简单的一道Java面试题,但无人能通过
  5. 使用 ApplicationLoader 上传应用到 Appstore
  6. 近视手术─医学界的一个阴谋? !
  7. python创建maven工程_Maven项目
  8. 动态注册广播接收者,屏幕锁定Android
  9. ubuntu 18.04 安装 LNMP后,nginx 和 apachae 冲突
  10. win7修复计算机卡了,Win7修复漏洞补丁后系统变卡的原因和解决方法
  11. PS去掉图片上的文字
  12. linux系统中 为mysql还原数据库_linux中mysql还原数据库命令
  13. 生命细胞游戏的C++实现
  14. vue+element实现一个excel表格下载的功能
  15. windos下 elasticksearch7.13安装踩坑记
  16. python ppt自动生成_实战 | Python自动生成PPT调研报告
  17. 【算法导论-主定理】用主方法求解递归式 学练结合版
  18. 简述防火墙--未知危险的屏障
  19. 【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法
  20. 【数据集分析】KEEL的鸢尾花(Iris)

热门文章

  1. TF2.0—tf.keras.layers.Lambda
  2. Java网络编程之服务端中的Socket
  3. Oracle注入点信息基本检测
  4. CSDN《程序员》杂志创始人蒋涛-推荐《程序员职场第一课》
  5. 深度学习:卷积神经网络CNN变体
  6. new,malloc,GlobalAlloc详解
  7. cmk聪明客机器人餐厅_住了10年的老房大改造,45客餐厅全开放,更有整面大衣柜,高级又实用!...
  8. 详细设计 存储分配_【存储论文笔记】Windows Azure Storage
  9. byte 类型_Go 语言string 也是引用类型
  10. mysql 大小限制_MYSQL 表大小限制