动态数组可以有两种使用方式:

1:不能预先知道数组的大小使用动态数组

传统数组(静态数组)是需要在程序运行前,就指定大小,比如说
int i = 10;
int a[i];
这种就是不合法的。
因为函数栈的要求,就是在函数运行前,分配好所有变量的空间,i是不定的,所以不能再运行前,就分配好空间。
但是大多数情况,我们并不能预先知道数组的大小的。
所以我们使用动态数组
int *a = new int[i];
这个语句就可以在执行的时候,才分配空间,是合法的。
2:大数组存储时栈区是有大小限制

传统数组是存放在栈区的,栈区是有大小限制的,如果你申请了一个大于2M的数组,程序就会报错……
但是动态数组是在堆空间的,理论上,内存有多大,就可以申请多大的数组。
在vc中栈默认是1M;有时创建一个a[1000000000]甚至更长的数组时栈会不够用,与此同时,即使数组不是太大,例如a[1000000],一次申请连续的数组会造成资源的浪费,并且可能因为很多因素内存的分配不能进行,而得不到内存。所以动态数组可以最大的限度节省内存空间。

一维动态数组的创建和删除

int *p = 0;p = new int[10];//创建delete [] p;

二维动态数组的创建和删除,以创建一个二维矩阵为例

double **data =0;//定义一个二维的指针
data = new double *[rsize];  //创建矩阵的行for (int i = 0; i < rsize; i++){data[i] = new double[csize];  //data[i] 此时是指针,创建矩阵的列}for (int i = 0; i < rsize; i++)for (int j = 0; j < csize; j++)data[i][j] = 0;  //初始化/*****二维动态数组删除****/ for (int i = 0; i < y; ++i)
{         delete p[i];//释放内存。       p[i] = NULL;//释放空间后将p[i]指向NULL值,  }
delete []p;    p = NULL;

new出来的数组它的逻辑地址(虚拟地址)是连续的,所以可以用遍历来读取,但物理地址是不一定的(因为要大数组存储,这个是操作系统的事情,用户不用关心)。

c++动态数组的优点,创建和删除相关推荐

  1. 动态顺序表的创建,增加,删除,查找

    先上代码,先上代码 #include<stdio.h> #include<stdlib.h> #define initsize 10 typedef struct {int* ...

  2. c++ 构造函数数组_“动态数组”的设计与实现

    引言 数据结构是计算机存储.组织数据的方式.常见的数据结构有: (1)线性结构 如:线性表(包括:数组.链表.栈.队列.哈希表). (2)树形结构 如:二叉树.AVL树.红黑树.B树.堆.Trie.哈 ...

  3. 数据结构之数组及动态数组剖析

    数据结构之数组及动态数组剖析 文章目录 数据结构之数组及动态数组剖析 概述 动态数组实现的原理 实践编写动态数组类 时间复杂度分析 数组对数器 参考代码 相关链接 公众号 参考 概述 数组是在程序设计 ...

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

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

  5. 从零开始实现数据结构(一) 动态数组

    动态数组是所有数据结构中最简单的一种,甚至在很多的语言中,数组本身就是可以不定长的.因为在学习c++的时候,使用动态数组的各种操作都不是很方便(数据结构的学习最好还是c或c++,基础打好了其他的语言数 ...

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

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

  7. C语言中动态数组的分配

    很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,但是现在发现这是一个相当不好的习惯,甚至可能导致编写的程序出现一些致命的错误. 尤其对于搞嵌入式的人来说,嵌入 ...

  8. 动态数组、关联数组、队列——SV,SystemVerilog

    文章目录 一.定宽数组 1.1 声明 1.2 for 和 foreach 遍历数组 1.3 数组的复制与比较 1.4 数组内建的方法 二.动态数组 2.1 创建动态数组 2.2 给动态数组赋值 三.队 ...

  9. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...

    #---------------------------------指针-----------------------------------# #include <iostream> i ...

最新文章

  1. 制作CentOS fence-agents 镜像
  2. unbutu 按照docker
  3. linux如何在shell中自动生成1到100的数组
  4. 后门怎么写隐蔽java_用Java写黑软-后门篇
  5. Tecplot 360 按教程安装完毕后,弹出“Is your Tecplot 360 EX liense valid?”【终极解决办法】
  6. 原来MySQl就是这样工作的
  7. Django 页面报错 Maximum recursion depth exceeded
  8. 【计算机组成原理】CISC和RISC
  9. 求1+2+…+n变态问题的两个很棒的解法
  10. 算法学习(二)快速排序(下)
  11. 43.mysqladmin
  12. android ios 声音大小,嫌手机声音太小?打开这个,声音瞬间放大10倍!
  13. 一份完整的数据分析师成长书单
  14. MAF 项目创建流程
  15. windows系统切换用户(通过cmd切换用户)
  16. 了解光纤宽带与普通宽带ADSL区别、光纤的通信原理
  17. 为何有些文献查不到DOI?
  18. redis键和值出现乱码问题 \xac\xed\x00\x05t\x00$
  19. 全球十大资质正规现货黄金交易平台排名榜单(最新版汇总)
  20. 三大框架-Spring

热门文章

  1. 计算机软件著作权源码要求,计算机软件著作权登记源代码-20210527121530.docx-原创力文档...
  2. RoboCup GameController安装方法
  3. 机器学习入门1-译文-机器学习是什么以及它的重要性(machine learning--what it is and why it matters)
  4. python自动化办公 51cto_用Python开发钉钉群机器人,自动办公神器
  5. c++ 不要节约代码行数_不要只是代码,但也c
  6. 30天自制操作系统第9天harib06a
  7. Lambda表达式到底是什么?——简单了解Lambda表达式
  8. Women in Tech | 关于职业与成长,她们给人奋进的启发和动力
  9. mysql的乐观锁,悲观锁(共享锁,排斥锁)
  10. 数据集:银行客户信息