美文网首页
C++定义动态数组

C++定义动态数组

作者: Mr希灵 | 来源:发表于2016-03-31 21:40 被阅读225次

为什么需要动态定义数组呢?

很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出。但是,c++要求定义数组时必须明确给定数组的大小,否则编译通不过。如:

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

为解决定义长度未知的数组这一问题,C++提供了new和delete操作符来实现动态数组定义。因为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];//定义指针数组
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;     //最后不要忘掉 释放掉开辟的指针数组 

相关文章

  • C++动态数组

    在C++中有的时候定义一个数组的长度大小是由用户自己定义的,这个时候就需要声明动态数组。 声明一维动态数组: 声明...

  • C++定义动态数组

    为什么需要动态定义数组呢? 很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出。...

  • C++知识查缺补漏

    C++知识查缺补漏 Vector 向量,动态数组 C++中的一个类,用起来相当于动态数组,可以使用在一开始无法确定...

  • VBA GENERAL

    数据类型 下表列举了常见的数据类型 数组操作 定义一个非动态数组 定义动态数组 通过 i to j来定义数据 用从...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • C++面试再进阶

    1、C++定义数组有大小限制吗?如何定义一个长度为一百万的数组? 答:定义数组大小的限制主要是看数组定义在内存的哪...

  • C++面试再进阶

    1、C++定义数组有大小限制吗?如何定义一个长度为一百万的数组? 答:定义数组大小的限制主要是看数组定义在内存的哪...

  • c++primer 12.23-12.33

    12.23这个题要注意c++对于char的几个常用的方法 12.24这个题要清楚,只要申请了动态数组,动态数组会根...

  • c++动态数组

    #include #include //动态增长内存,策略将存放数据的内存放到那?堆上 //动态数组如果5个元素申...

  • C++动态数组

网友评论

      本文标题:C++定义动态数组

      本文链接:https://www.haomeiwen.com/subject/rcoelttx.html