如何定义动态一维二维数组
2014-12-12 21:19
155 查看
首先,C++是不允许定义不确定数组的,但是,有时候我们并不确定所需要的数组的长度,我们所需要的数组的长度根据输入的不同而不同,所以,这时候定义一个动态长度的数组十分必要,但是,C++是不支持定义不确定长度的数组的。
那么问题来了,为什么C++不支持定义不确定长度的数组呢?当我们用如下代码时
那我们如何定义一个我们也不知道长度的数组呢?答曰:用指针。我们定义指针时,编译器只是分配了一个sizeof(*p)长度的空间,实际上,数组的空间还没有分配,只是在使用的时候才临时分配。
那么,如何对数组进行初始化呢?很简单,跟普通的数组初始化方式差不多。
注意:只要用到new就要用delete
那么问题来了,为什么C++不支持定义不确定长度的数组呢?当我们用如下代码时
int length; int array[length];编译器会报错。为什么会报错呢?因为编译的过程是是给代码分配内存空间的过程,编译器不知道length到底是多大,也就不知道给array[length]分配多大的内存空间。
那我们如何定义一个我们也不知道长度的数组呢?答曰:用指针。我们定义指针时,编译器只是分配了一个sizeof(*p)长度的空间,实际上,数组的空间还没有分配,只是在使用的时候才临时分配。
1、下面先定义一维动态数组:
int length; int *p=new int[length];数组定义完毕。
那么,如何对数组进行初始化呢?很简单,跟普通的数组初始化方式差不多。
for(int i=0;i<length;++i) p[i]=i;最后不要忘记释放内存delete[] p。
2、下面定义二位动态数组
二维数组的定义只是在一位数组的基础上加了个指针而已,即:指向指针数组的指针。int col,row; cin>>col>>row; int **p=new int*[col]; for(int i=0;i<col;++i) p[i]=new int[col];//建立一维数组每个元素指针指向的一维数组 for(int i=0;i<col;++i) for(int j=0;j<row;++j) p[i][j]=j; for(int i=0;i<col;++i) { for(int j=0;j<row;++j) cout<<p[i][j]; cout<<endl; }
最后,同样不要忘记释放内存空间。
<pre name="code" class="cpp">for(int i=0;i<col;++i) delete[] p[row];//如果没有前一个[]则只会释放二维数组一个元素指向的一维数组对应的空间
注意:只要用到new就要用delete
相关文章推荐
- 【转】C++中new动态定义一维数组,二维数组,三维数组
- C++中动态定义一维数组,二维数组,三维数组
- 简洁明了,C++中动态定义一维数组,二维数组,三维数组
- C++中动态定义一维数组,二维数组,三维数组
- 简洁明了,C++中动态定义一维数组,二维数组,三维数组
- C++ 如何定义动态二维数组?
- C++中动态定义一维数组,二维数组,三维数组的方法
- C语言中如何定义动态二维数组并输出
- C语言中动态二维数组定义
- MOSS : 如何动态修改列表视图定义
- MOSS : 如何动态修改列表视图定义
- javascript中如何定义二维数组
- 如何在C++中动态分配二维数组
- java动态定义二维数组问题
- 如何动态分配二维数组
- 如何在定义游标的时候使用动态sql语句?
- JSON定义一维和二维数组格式
- 如何动态创建和使用二维数组
- java动态定义二维数组问题
- 如何动态创建二维数组