首先:为什么需要动态定义数组呢?
  这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出
  但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 
 
  如: int Array[5];正确

int i=5;
       int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少

那么,我们该如何解决定义长度未知的数组呢?
   答案是:new 动态定义数组

因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间
   
   这样,下面的语句:
    int size=50;
    int *p=new int[size]; 是正确的
 
   但是二维动态数组能不能也这样定义呢
   
  int size=50,Column=50;
  int (*p)[Column]=new int [size][Column]

这样的语句,编译器通不过,为什么呢?
  首先 new int[size][Column] 就是动态生成时确定的,所以它没有错
  那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。

改成这样:
  int size=50
  int (*p)[50]=new int [size][50]
  便正确了。

由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。
   但是如何真正的动态分配二维数组呢,即如果Column 也不能预先知道的话,该如何处理呢?
   
   上面的动态分配已经不能满足我们的要求,因为上面动态分配只对一维数组是真正动态的,对二维数组的话,必须编译之前预先知道二维数组每一列的长度,而这个长度在很多情况下是不能预先知道的,所以我们得结合其他方法来解决这个问题。
   
   既然一维是真正的动态分配的话,那我们利用这一特性定义一个指针数组。
   
   int **p= new int*[size];//定义指针数组 
   int *p[5];//  假若知道二维数组的行数为5

然后对指针数组中的每一个指针分配一个一维数组空间,这样便动态定义了二维数组
  
   事实上,我认为指针数组的主要用途,就在于动态定义多维数组
    
    for(int i=0;i<size;i++)
   {
     p[i]=new int[Column];
   }
   
   运行完毕后,一个二维数组便被动态的成功建立

-----------------------------------

例子:

size =6;

column =5

int **p=new int*[size];

for(int i=0;i<size;i++)
   {
     p[i]=new int[Column];
   }

所生成的动态数组如下图所示:

最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉

下面是delete方法:

for(int i=0;i<size;i++)
   {

delete []  p[i];   // 要在指针前加[] , 否则的话 只释放p[i]所指的第一个单元所占的空间
   }

delete [] p;     //最后不要忘掉 释放掉开辟的指针数组  :》

假设是char型

char*p,*q;;
int a=1;
p=(char*)malloc(a);
while
{
a++;
q=p;
p=(char*)realloc(q,a);//通过realloc扩大p的空间,并把新的地址赋值给p。;新数组大小加1
if(结束条件)
break;

](char*)realloc(q,20);//A行,通过realloc扩大p的空间,并把新的地址赋值给p。
//…………………………

                  
int number , *p;
cin>>number;
int *p = new int[number];
.......

delete []p; //最后要delete掉new出来的数组



C++中如何定义动态数组相关推荐

  1. python去除数组缺失值_动态数组的应用,VBA中如何利用动态数组去除重复值的第二讲...

    大家好,我们今日继续讲解VBA代码解决方案的第62讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法第二部分.在上一讲中,我们讲了知识点的利用,其一是Filter函数,其二是ReDi ...

  2. c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...

    大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法.如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法 ...

  3. Java中如何定义一个数组呢?

    转自: Java中如何定义一个数组呢? 数组(Array)是有序的元素序列.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标 ...

  4. java中的arrayList(动态数组)与静态数组

    首先,有时用数组时,常把静态数组和动态相混淆,今天来区分一下: 先写一下java中静态数组, 一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元 ...

  5. C语言中malloc函数及free函数用法(定义动态数组及释放)

    一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...

  6. C++中如何定义某个数组的引用?

    我要定义一个函数,以某个数组为参数.函数中要计算这个数组的长度. 如果是在外面,可以直接用诸如sizeof a/sizeof a[0]这样的方法得到,但是我把a作为参数传到函数中后,这个形参就是指针类 ...

  7. java中如何定义一个数组

    数组的定义方法 //定义一个空数组, int[] a=null; int[] a={}; int[] a=new int[0]; 注意:空数组没有空间,不能赋值!只能把另一个数组的地址给他,这里指的是 ...

  8. python中如何定义一个数组_Python数组定义方法

    本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...

  9. python声明数组_在Python中如何声明动态数组

    I want to declare an Array and all items present in the ListBox Should Be deleted irrespective of th ...

最新文章

  1. 自然语言处理 的 一些环境和包
  2. spring boot一:入门
  3. hadoop学习;datajoin;chain签名;combine()
  4. 张亚勤:从信息化生存到互联网化生存 百度重构互联网安全防护体系
  5. hadoop 伪分布模式
  6. 字符串的转换相关方法
  7. matlab中关于@的作用(函数表达式句柄)
  8. 变量命名 – 匈利亚命名法则 - C语言零基础入门教程
  9. mug网络用语_各种游戏术语
  10. 如何在Mac上轻松使用SVN
  11. 手心输入法导致 Navicat for MySQL闪退的解决办法
  12. 利用python爬取租房信息网_python实战计划:爬取租房信息
  13. windows系统镜像修复计算机,Win7操作系统下系统还原和映像修复方法
  14. TI-C6657开发板烧录步骤
  15. Jetty插件运行报500错误
  16. uniapp picker选择器注意点
  17. Java流程控制方法
  18. 【转载】Android功耗改进
  19. EXCEL公式-文本型数据转换为数值型数据
  20. 软考程序员有必要考吗?

热门文章

  1. webpack 合并压缩_webpack的运用
  2. mysql 开启innodb win版本_MySQL安装与启动——Windows系统下
  3. ogg批量配置_Macos上一款批量文件重命名工具A Better Finder Rename 11
  4. python自动获取号码归属地_Nemo_Python:批量获取并保存手机号的归属地和运营商_Nemo社区_LinkNemo_关于分享和探索的好地方...
  5. 不同编程语言能耗不同?看这27种语言对比!
  6. 电机驱动TB6612FNG全网断货,可替代方案来了,文末送模块!
  7. 列表_月隐学python第6课
  8. 信号的时频分析MATLAB,[转载]时频特性分析(Matlab)
  9. julia const报错_我爱Julia之入门-004
  10. iris数据_Kaggle 数据可视化课程5