首先,C++是不允许定义不确定数组的,但是,有时候我们并不确定所需要的数组的长度,我们所需要的数组的长度根据输入的不同而不同,所以,这时候定义一个动态长度的数组十分必要,但是,C++是不支持定义不确定长度的数组的。
那么问题来了,为什么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