C++一维和二维数组的创建和释放

1.一维数组

1.1 一维数组的创建

使用new动态创建数组

在堆中分配空间,需要通过delete释放。

int *ary=new double[num];

静态创建数组

在栈中分配空间,会自动释放。但栈的空间有限。

int a[5]={1,2,3,4,5};

1.2 一维数组的释放

delete [] ary;

2.二维数组

2.1 二维数组的定义与初始化

使用new创建二维数组

这里通过C++二级指针来实现,引入变量 int rowNum 行数, int coluNum 列数, char **p 二维字符数组,这里假定二维字符数组中的字符只能为'0'和'1'。

实际分配空间在堆里面,不会出现栈溢出的情况。动态二维数组在内存中的存储内存可以是不连续的。(即使是一维的动态数组,其存储内存也可能是不连续)

int **ary = new char*[rowNum];
for(int i = 0; i < rowNum; ++i)
    ary[i] = new char[colNum];

静态二维数组

实际分配空间在栈里面,数组定义过大可能会出现栈溢出的错误。静态数组在C/C++中,其实没有真正两维的概念,对所有的静态数组来说,都是一维的。也就是说下面的5×5的二维数组是一个一维数组,大小为25。二维静态数组在内存中数据的存储是在连续的内存空间。
int ary[5][5];

2.2 二级指针内存的释放

二级指针内存的释放和内存的申请类似,具体代码如下。

for(int i=0;i<rowNum;i++)
{
     delete[] p[i];
}
delete []p;

注意:

    1.程序在执行完相关功能应释放申请过的内存,虽然程序结束时操作系统会自动清除,但对于需要长时间运行的程序来说如果不及时释放内存的话程序的运行效率会越来越低,严重甚至占用完绝大部分系统内存,印象其它程程序的运行。

    2.在初始化二维指针时,形式参数传值应实用C++中的引用,否则申请到的内存也只能用于局部函数,起不到初始化二维指针的效果。引用实际上是将实参的地址直接传入到局部函数中进行运算。

    3.局部定义的指针不要通过函数的return 返回

    4.在存储大量数据的时候,vector的效率比数组效率更低

猜你喜欢

转载自blog.csdn.net/k5722166/article/details/79171367