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++ 创建数组并初始化相关推荐

  1. Java如何创建数组并初始化

    先创建数组,再对数组赋值 public class Test {public static void main(String[] args) {// 创建数组// Java 中数组长度不要求是常量in ...

  2. js创建数组的简单方法

    1. 使用Array构造函数创建 数组的创建方式-Array构造函数.png a.var arr1 = new Array(); //创建空数组 b.var arr2 = new Array(10): ...

  3. js创建数组注意事项

    创建新数组原理(白嫖的图) var arr1 = new Array(); 创建空数组 var arr2 = new Array(10); 创建一个长度为10的数组 var arr3 = new Ar ...

  4. c++ stl队列初始化_创建一个向量,并将其像C ++ STL中的数组一样初始化

    c++ stl队列初始化 向量是什么? (What is the vector?) Vector is a container in C++ STL, it is used to represent ...

  5. 设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息

    设计一个雇员类,创建雇员类的对象数组并初始化,输出每个雇员的信息 class Employee { //雇员类private String id; //编号private String name; / ...

  6. java创建数组对象_java对象数组 创建对象数组,初始化对象数组

    对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组. 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象. 对象数组的定义和使用: 对象数组 ...

  7. 对象数组的初始化_JAVA中数组是什么?

    Java中数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特点: ...

  8. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...

  9. C++ 用vector创建数组对象

    C++ 标准库提供了被封装的动态数组--vector,这种被封装的数组可以具有各种类型.vector不是一个类,而是一个类模版. 用vector定义动态数组的形式为: vector<元素类型&g ...

最新文章

  1. inline函数包涵static变量,调用时是否会有多份拷贝
  2. linux复制duo文件,自动生成Linux下Makefile全攻略(转)
  3. access如何保存小数点后_跟宇哥学习Access数据库是怎样一种体验?(1)
  4. 计算机操作系统生产者和消费者模型的简单介绍
  5. 全国计算机二级公共知识点,全国计算机二级公共基础知识知识点
  6. 需求阶段如何书写Use Case
  7. CodeVs1519 过路费
  8. 如何把winform图片背景换成透明颜色_如何用photoshop更换图片背景颜色?
  9. 移动端报表JS开发示例
  10. XCODE中,修改苹果APP支持哪些设备
  11. C++求出200以内的所有质数(素数),并按每行5个输出在屏幕上。
  12. java使用POI识别excel的复选框插件
  13. 硅谷火爆的云原生,你会玩吗?
  14. Matlab2018b新特性介绍以及R2018b+waijung blockst 百度云下载链接
  15. 恒压板框过滤实验数据处理_鞍山高温除尘袋公司,板框压滤机滤布,热门_泰翔工业滤料...
  16. 2020茶艺师(中级)模拟考试及茶艺师(中级)模拟考试题库
  17. 4K视频编码 H 264 H 265 VP9谁主沉浮
  18. 通过API接口获取下来的数据需要怎样才能应用
  19. 扑克牌游戏(斗地主)
  20. 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day2

热门文章

  1. speedoffice表格中怎么删除重复数据只保留一个
  2. SRA数据库的各种编号
  3. alertdialog报错_alertdialog创建
  4. 不多于 5 位的正整数逆序输出(python)
  5. 宅霸无法下载java_我的世界宅霸进不了世界频道怎么办
  6. 无线蓝牙耳机选哪个好?2022年最新无线蓝牙耳机排行榜
  7. (0014) H5-新闻网页案例
  8. layui中iframe自适应高度
  9. 港科百创 | 教授企业安建科技B轮融资¥1.8亿,开创半导体产业新势力!
  10. 捷为科技签约镇海石化, 打造石化建安行业生产项目信息化管理系统