二维数组的动态分配(new)、初始化(memset)和撤销(delete)
来自http://blog.csdn.net/maverick1990/article/details/22829135
一维数组
动态分配,int *array = new int[10]
初始化,memset(array,0,sizeof(int)*10);
撤销,delete[] array
二维数组m行n列
int **d;
d = new int *[];
for(int i =;i<;i++){
d[i] = new int[]
}
先分配一个10单元的数组指针的指针的首地址给**d,然后对其每个首地址进行遍历,
完成一个5单元的数组的动态分配,并把首地址给*d[i],最后完成d[10][5]的动态分配。
怎么初始化二维数组?
void memset(void* dest,int c,size_t count)////
sets buffers to a specified character.
memset只能作用于一个一维数组的void *dest,因此最好的方法就是和二维数组的动态分配,
memset最好用来初始化数组为零,初始化bool数组
结合起来,new一个,memset一个。
例如:
int **d;
d = new int *[];
for(int i = ;i<;i++){
d[i] = new int[];
memset(d[i],,*sizeof(int));///当sizeof一个指针时,返回值为指针本身的大小而不是指针指向区域的大小,
///所以第三个要明确空间大小,不能sizeof(d[i]).
}
如何撤销?
for(int i = 0;i<10;i++){
delete[] a[i];
}
delete[] a;
=========================
来个例子,
class A{
public:
void test_memset(){
///============
int *d;
d = new int[];
memset(d,-,sizeof(int)*);
for(int i = ;i<;i++){
cout<<d[i]<<" ";
}cout<<endl;
delete[] d;
///==============
int **a;
a = new int*[];
for(int i = ;i<;i++){
a[i] = new int[];
memset(a[i],-,sizeof(int)*);
}
for(int i = ;i<;i++){
for(int j = ;j<;j++){
cout<<a[i][j]<<" ";
}cout<<endl;
}
for(int i = ;i<;i++){
delete[] a[i];
}
delete[] a;
///====================
int ***c;
c = new int**[];
for(int i = ;i<;i++){
c[i] = new int*[];
for(int j = ;j<;j++){
c[i][j] = new int[];
memset(c[i][j],-,sizeof(int)*);
}
}
for(int i = ;i<;i++){
for(int j = ;j<;j++){
for(int k = ;k<;k++){
cout<<"i-j-k"<<i<<j<<k<<"~"<<c[i][j][k]<<" ";
}cout<<endl;
}cout<<endl<<endl;
}
///===========
for(int i = ;i<;i++){
for(int j = ;j<;j++){
delete[] c[i][j];
}
delete[] c[i];
}
delete[] c;
cout<<"destoryed done!"<<endl;
}
};
二维数组的动态分配(new)、初始化(memset)和撤销(delete)的更多相关文章
- C++二维数组讲解、二维数组的声明和初始化
我们知道,一维空间是一条线,数学中用一条数轴来表达:二维空间是一个平面,数学中用平面坐标系来表达.那么二维数组又是什么样的呢? 线与面 我们用一个下标来描述一维数组中的某个元素,就好像在用数描述一条线 ...
- [zt]C++二维数组讲解、二维数组的声明和初始化
定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...
- 关于c语言二维数组与指针的个人理解及处理办法。
相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...
- C指针 指针和数组 二维数组的指针 指针应用
直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...
- JS的二维数组
今天,记录一下JS的二位数组,并附上例题. 一.二维数组的本质:数组中的元素又是数组. 其实,我们都见过这样的二维数组,只不过没在意罢了,例如: var arr = [[1,2,4,6],[2,4,7 ...
- c++用vector创建二维数组
1 vector二维数组的创建和初始化 std::vector <int> vec(10,90); //将10个一维动态数组初始为90std::vector<std::vector& ...
- Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- C#学习笔记04--排序/查找/二维数组/交叉数组
一. 冒泡排序(重点) 思路: 每次比较把较小的放在前面, 大的放到后面; 图解:下图是最坏情况下的排序 ` 冒泡排序m个元素, 就有(m-1)趟排序, 第一趟m-1次, 第二趟 m-2次.... ...
- C++二维数组(指针)做参数
一.问题描述 使用C++编程过程中经常需要使用到二维数组,然而初级程序员在使用过程中经常会出错使程序崩溃.下面就二维指针的定义,初始化,以及二维指针做参数给出简单介绍. 1.二维数组的定义与初始化 在 ...
随机推荐
- linux 命令——15 tail (转)
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...
- World Wind Java开发之九——阶段小结(转)
http://blog.csdn.net/giser_whu/article/details/42785875 将近一个月没有更新了,一是因为项目的事情,二是期末考试复习,三是玩啦.上一篇博客搭建起了 ...
- geoWithin查询 多边形查询
$geoWithin查询 形状的表示 .$box:矩形,使用 {$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示 都是坐标,第一个坐标 ...
- Java 发送 Https 请求工具类 (兼容http)
依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...
- 文件系统inodes使用率过高问题处理
运维过程中经常碰见文件系统inodes使用率过高导致文件系统不可写的问题,常见场景如下 .Oracle产生的审计文件,特别是DG备库或者审计设置为OS时 .crontab产生大量邮件,导致/var/s ...
- vue框架初学习的基本指令
学习地址:<ahref="https: cn.vuejs.="" org="" "="" targe ...
- 【转】【win网络编程】socket中的recv阻塞和select的用法
在编写ftp客户端程序时,在联通后使用recv函数进行接收欢迎信息时,需要申请内存进行接收数据保存,一次读取成功,但是由于一个随机的ftp服务端在说,欢迎信息的大小是不知道的,所以在尝试使用死循环,在 ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
- 三十一、MySQL 及 SQL 注入
MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...
- Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑
django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...