C++ 创建数组并初始化
C++ 创建数组并初始化
在 C 语言中如果想动态分配内存,创建一个数组,需要用 malloc 和 free。到了 C++ 中我们还可以选择 new 和 delete 来申请一个数组。他们之间有相同的地方也有区别。详情请参考https://www.cnblogs.com/ywliao/articles/8116622.html。简单来说,new/delete 更偏向于面向对象,申请的数组类型可以是一个类,而 malloc / free 更多适用基础类型数组的创建。
1、在基础类型和(基础类型)数组中:
malloc 可以用 free 释放,new 可以用 delete 释放
2、在类对象中:
free 可以释放 new 的对象,但是不会执行析构函数
最主要的区别
malloc 不会调用构造函数,new 可以
free 不会执行析构函数,delete 可以
本博客主要面向应用,进行总结,为以后方便复习和应用,故不过多进行讨论
1、一维数组
malloc/free:
int* Array = (int*)malloc(ArraySize * sizeof(int)); // 在堆中申请内存
memset(Array, 0, ArraySize * sizeof(int)); // 初始化数组全为 0
free(Array); // 释放内存
new/delete:
int* Array = new int[ArraySize]; // 仅在自由存储区中申请内存,不初始化
int* Array = new int[ArraySize](); // 初始化数组全为 0
int* Array = new int[5]{ 1,2,3,4,5 }; // 初始化数组为 1,2,3,4,5(VS2015支持)
int* Array = new int[5]{ 1 }; // 初始化数组为 1,0,0,0,0
delete[] Array; // 释放内存
2、二维数组
本质上并没有二维数组的概念,比如int[2][3]这个二维数组,它会被编译器视作一个元素类型为‘int[3]’的一维数组。详情请见:https://blog.csdn.net/yuqinjh/article/details/79095787。
也就是在数组中分别有 2 个 int[3]。但是 编译器不会吧 int[3] 当成基本类型,需要变成 3 个 *int。
malloc/free:
int **Array = (int**)malloc(ArrayRow * sizeof(int *)); // 先行
for (int i = 0; i < ArrayRow; i++)
{Array[i] = (int*)malloc(ArrayCol * sizeof(int)); // 后列memset(Array[i], 0, ArrayCol * sizeof(int)); // 初始化 0
}for (int i = 0; i < 3; i++) // 释放内存
{free(Array[i]);
}
free(Array);
new/delete:
int **Array = new int *[ArrayRow];
for (int i = 0; i < ArrayRow; i++)
{Array[i] = new int[ArrayCol](); // 初始化 0
}for(i = 0; i < ArrayRow; i++) // 释放内存
{ delete[] Array[i];
}
delete[] Array;
C++ 创建数组并初始化相关推荐
- Java如何创建数组并初始化
先创建数组,再对数组赋值 public class Test {public static void main(String[] args) {// 创建数组// Java 中数组长度不要求是常量in ...
- js创建数组的简单方法
1. 使用Array构造函数创建 数组的创建方式-Array构造函数.png a.var arr1 = new Array(); //创建空数组 b.var arr2 = new Array(10): ...
- js创建数组注意事项
创建新数组原理(白嫖的图) var arr1 = new Array(); 创建空数组 var arr2 = new Array(10); 创建一个长度为10的数组 var arr3 = new Ar ...
- c++ stl队列初始化_创建一个向量,并将其像C ++ STL中的数组一样初始化
c++ stl队列初始化 向量是什么? (What is the vector?) Vector is a container in C++ STL, it is used to represent ...
- 设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息
设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息 class Employee { //雇员类private String id; //编号private String name; / ...
- java创建数组对象_java对象数组 创建对象数组,初始化对象数组
对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组. 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象. 对象数组的定义和使用: 对象数组 ...
- 对象数组的初始化_JAVA中数组是什么?
Java中数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特点: ...
- 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...
- C++ 用vector创建数组对象
C++ 标准库提供了被封装的动态数组--vector,这种被封装的数组可以具有各种类型.vector不是一个类,而是一个类模版. 用vector定义动态数组的形式为: vector<元素类型&g ...
最新文章
- inline函数包涵static变量,调用时是否会有多份拷贝
- linux复制duo文件,自动生成Linux下Makefile全攻略(转)
- access如何保存小数点后_跟宇哥学习Access数据库是怎样一种体验?(1)
- 计算机操作系统生产者和消费者模型的简单介绍
- 全国计算机二级公共知识点,全国计算机二级公共基础知识知识点
- 需求阶段如何书写Use Case
- CodeVs1519 过路费
- 如何把winform图片背景换成透明颜色_如何用photoshop更换图片背景颜色?
- 移动端报表JS开发示例
- XCODE中,修改苹果APP支持哪些设备
- C++求出200以内的所有质数(素数),并按每行5个输出在屏幕上。
- java使用POI识别excel的复选框插件
- 硅谷火爆的云原生,你会玩吗?
- Matlab2018b新特性介绍以及R2018b+waijung blockst 百度云下载链接
- 恒压板框过滤实验数据处理_鞍山高温除尘袋公司,板框压滤机滤布,热门_泰翔工业滤料...
- 2020茶艺师(中级)模拟考试及茶艺师(中级)模拟考试题库
- 4K视频编码 H 264 H 265 VP9谁主沉浮
- 通过API接口获取下来的数据需要怎样才能应用
- 扑克牌游戏(斗地主)
- 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day2