您的位置:首页 > 其它

如何定义动态一维二维数组

2014-12-12 21:19 155 查看
首先,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: