(一)动态创建数组:数组大小为非常量表达式
(1)一维数组
int num ;//从其他地方得到
分配内存
f loat *p=new float[num];
释放内存
delete []p;
(2)二维数组
分配内存
Float **p = new float *[orders.size()];
For(int i=0;i<orders.size();i++)
P[i] = new float[orders.size()];
释放内存:
For(int i=0;i<orders.size();i++)
Delete []p[i];
Delete []p;
动态生成数组,指针返回的时候是指向数组第一个元素;所以在释放内存的时候首先将每个单元内存释放,然后释放单元内元素内存。
(二) 动态与静态之间区别
静态数组如 int[100] 是在栈中申请的;而动态数组是再堆上申请的,没有delete 是不会释放内存的。
int **a = new int *[3];
for (int i=0;i<3;i++)
a[i] = new int[4];
for (int i=0;i<3;i++)
{
for (int j=0;j<4;j++)
cout<<&a[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<endl;
int b[3][4];
for (int i=0;i<3;i++)
{
for (int j=0;j<4;j++)
cout<<&b[i][j]<<" ";
cout<<endl;
}
cout<<endl;
我们可以得到如下地址:
Int 型占4个字节,动态分配内存的时候行与行之间地址不连续,行内元素是连续的;静态分配的内存行与行之间地址是连续的。