C++操作符new用来进行动态存储分配或运行时存储分配,它的值是一个指针。
为一个整数动态分配存储空间,并赋初值10,如下几种分配方法均可实现:
(1)
int *y;
y=new int;
*y=10;
(2)
int *y=new int;
*y=10;
(3)
int *y=new int(10);
(4)
int *y;
y=new int(10);
一个长度为n的一维浮点数组可以按如下方式创建:
float *x=new float [n];
动态分配的存储空间不再需要时应该把它释放,C++操作符delete用来释放由操作符new所分配的空间。下面的语句用来释放分配给*y和一维数组x的空间:
delete y;
delete [] x;
要构造一个numberofRows行numberofColumns列的二维数组,可以把它看作是由numberofRows行所构成的结构,每一行都是一个能用new来创建的一维数组。指向每一行的指针保存在另一个一维数组中。
创建一个二维数组并分配内存空间,以及使用结束后释放内存空间的代码如下:
#include<stdio.h>
void make2dArray(char ** &x, int numberofRows, int numberofCloumns) //创建一个char型动态二维数组
{
x = new char *[numberofRows];//指针数组
for (int i = 0;i< numberofRows;i++)
{
x[i] = new char[numberofCloumns];
}
}
void delete2dArray(char ** &x, int numberofRows) //释放分配的二维数组空间
{
for (int i = 0;i< numberofRows;i++)
{
delete[] x[i];
x[i]=NULL;
}
delete[] x;
x = NULL;
}
int main()
{
char ** array;
make2dArray(array, 2, 3);
int i = 0;
int j = 0;
for (i = 0;i<2;i++)
{
for (j = 0;j<3;j++)
{
array[i][j] = 1;//为二维数组每一个元素赋值
}
}
for (i = 0;i < 2;i++)
{
printf("\n");
for (j = 0;j< 3;j++)
{
printf("%d ", array[i][j]); //打印二维数组
}
}
delete2dArray(array, 2);
return 0;
}
创建二维数组时首先分配一个长度为所要创建的二维数组行数的指针数组,将其首地址保存在x中。接着为指针数组的每一个元素分配一个长度为所要创建的二维数组列数的字符型数组。这就完成了一个二维数组的创建。
在释放二维数组空间时,首先释放在for循环中为每一行所分配的空间,然后释放行指针所分配的空间。将指针设为NULL是为了防止用户继续访问已被释放的空间。
程序运行结果如下:
1 1 1 请按任意键继续. . .
在内存空间观察窗口可以发现对于创建的2行3列的二维数组,array[0]和array[1]的值不同(即二维数组的两行的起始地址不同),然后每一行连续存储其对应的3列的数据。