二维数组与new/delete
来源:互联网 发布:龙腾世纪3优化差 编辑:程序博客网 时间:2024/05/21 13:19
一维数组的动态分配,初始化和撤销都好说,几乎每一本C++教材都会做出详细的说明。具体如下:
动态分配(例如分配10个单元的): int *array=new int[10];
初始化:memset(array,0,sizeof(array));
撤销:delete [] array;
下面来说二维数组的。
二维数组(n行m列)利用new来进行动态分配实际上相当于对n个m元数组进行动态分配,只不过我们不能一味的按照动态分配一维数组的方法来这项操作。MSVC目前还没有这般的人性化,具体应该这样做:
int **array;
array=new int *[10];
for(int i=0;i<10;i++)
二维数组的初始化:如果把一维数组初始化办法照搬过来就会发现对于动态分配的二维数组并不适用。这就要理解到memset这个函数三个参数的含义。MSDN对memset的描述如下:
memset
Sets buffers to a specified character.
void *memset(void*dest,intc,size_t count);
可见memset只能作用于一个一维数组void*dest,因此最好的办法就是和二维数组的动态分配结合起来,new一个,memset一个。具体写法如下:
int **array;
array=new int *[10];
for(int i=0;i<10;i++)
{
}
可以看到这里的memset的第三个参数有了变化。这是很关键的!这其中的原因是什么呢?我现在也还不太清楚。。。。。大家先照着这么写吧
二维数组的撤销:delete [] array
首先,动态支持数组的分配,必须用 new 来进行创建一段堆内存,其它的存贮区域不允许动态分配的产生。
其次,C++并没有提供真正的动态多维数组语法,想动态分配数组,必须通过一维动态数组组合形成一个类似多维数组的存贮形式,并不像静态分配多维数组,它们的用法虽说有些地方有相似之处,但不完全相同。
再次,有些网友有一些很BT的分配方式。
例如:
int (*p)[4] = new int[3][4];
解释:可能有些初学者认为这样是可取的,也是利用 new 分配的数组,就可以是动态的,那你的想法就错了,它的分配必须得有最外层const 的支持—
int x = 3, y = 4;
int (*p)[y] = new int[x][y];//error,y必须是const。
所以这种方式不能达到真正的动态分配二维数组的目的,只能相当于半自动化的一个分配方式。
那么如果依靠下面的这种方式是正确的:
例:
int x = 3, y = 4;
int **p = new int*[x];//创建一个动态 int* 型数组
for (int i = 0; i < y; ++i)
p[i] = new int [x]; //再创建一个动态 int 型数组
for (int i = 0; i < y; ++i)
{
}
delete []p;
p = NULL;
它就是依靠一维数组的组合来完成,这样创建的动态数组就是一个全自动的个分配方式。
void * buf = malloc (x * y * sizeof (int) );//这也是一个好方法,简单方便,但它是C里面的分配方式。
free(buf);//释放内存简单方便.
- 二维数组与new/delete
- 如何new与delete各种二维数组
- 如何new与delete各种二维数组
- 如何new与delete各种二维数组
- new与二维数组
- 模板:使用new delete 创建二维数组
- 二维数组的new 和 delete
- 使用new和delete创建二维数组
- new/delete多维数组/malloc分配动态二维数组
- 利用new定义二维数组,delete删除…
- new和delete以及malloc和free 二维数组
- 二维数组的动态分配(new)、初始化(memset)和撤销(delete)
- 利用new定义二维数组,delete删除内存空间
- new delete 实现动态分配和释放二维数组
- 二维数组的使用(new,delete,初始化,输出)
- c++二维动态数组分配与delete
- delete与delete[]区别及二维数组申请注意点
- new&delete 与 new[]&delete[]
- 项目 从Myclipse web 转为 Eclipse web
- cygwin syntax error near unexpected token `$'do\r''
- 谁贪占了我的系统资源 php-fpm
- Xcode4.2+SVN代码管理研究(一)
- Xcode4.2+SVN代码管理研究(二)
- 二维数组与new/delete
- poj 1493 Machined Surfaces
- 服务器×××上的MSDTC不可用解决办法
- 第十六周实验报告1
- MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示、编...
- 顺序栈
- MAYA MEL 基础
- Cannot make a static reference to the non-static method xxx()
- MYSQL5.5修改字符集报错:unknown variable 'default-character-set=utf8'