C++在数组元素个数未知情况下声明数组
我们都从书上学习的方法,定义一个数组需要数组名、类型以及数组元素个数,一般定义必须明确元素的个数,否则无法通过编译。
1、
int a[];
2、
int n; int a[n];
就想上面这两种情况,肯定无法通过编译的。
当然有一种情况不用定义元素个数,就是在声明的时候就将数组进行初始化赋值。
int a[] = {1,2,3,4}
这种情况是可以的。
那当我不想进行初始化赋值,又不能确定元素个数时,我们该如何声明这个数组呢?
我相信很多人遇到过这个问题,我也一样。今天我终于找到这个问题的解决方案——利用动态声明的方式声明一个数组。
首先,我们来看看一维数组的定义,代码如下:
int n; int *a = new int[n];
当然,动态声明一位数组,实质是根据n的值向内存申请了n*sizeof(int)大小的空间,在数组使用完之后,需要释放这个空间:
delete []a;
那么二维数组如何通过动态声明进行声明呢?代码如下:
int **a = new int*[m]; //首先声明一组指向各行指针 for(int i = 0;i<m;i++) a[i] = new int[n] //再声明各行的每列元素的指针
同样,使用完数组还需释放内存空间:
for(int i = 0; i<m;i++) delete []a[i]; delete []a;
最后要注意的一点是,动态声明的二维数组中,a[k]是一个int*类型,是一个指针,因此只能使用a[i][j]或*(*(a+i)+j)访问相应的元素,绝对不能使用a[i*n+j]的方式访问。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。