目录

C中的动态申请空间

C++动态申请空间

new一个整型

申请空间的同时,给定初始化值

new 数组 返回的是首元素的首地址

释放数组空间时,不管是几维数组,只需要在指针前加一个[]

new 整型地址

new 整型指针数组

new 整型数组指针

new 整型的二维数组

new 自定义类型(结构体)

new 函数指针

总结


C中的动态申请空间

我们还记得,在C语言中动态申请空间用的malloc,释放空间用的是free,使用时需要显示的指定申请空间的大小。

 int* p1 = (int*)malloc(sizeof(int));*p1 = 10;cout << *p1 << endl;free(p1);p1 = NULL;

C++动态申请空间

在C++中用的是两个新的关键字new、delete来动态申请、释放空间,同样操作的是堆区,new申请空间不需要指定空间的大小,而是指定类型,根据类型自动计算所需要空间的大小,并返回申请内存空间的地址,地址指向的类型为new后写的类型,格式:type * pointer = new type。

new一个整型

 int* p2 = new int;*p2 = 20;cout << *p2 << endl;delete p2;p2 = NULL;

申请空间的同时,给定初始化值

 char* p3 = new char('a');  //申请空间的同时,给定初始化值cout << *p3 << endl;delete p3;

new 数组 返回的是首元素的首地址

 //int* p4 = new int[3];//new 数组 返回的是首元素的首地址(未初始化数组)int* p4 = new int[3]{ 10,20,30 };//new 数组 返回的是首元素的首地址,指定初始化值for (int i = 0; i < 3; i++){cout << p4[i] << "  ";}cout << endl;

释放数组空间时,不管是几维数组,只需要在指针前加一个[]

 delete[]p4; //不管是几维数组,只需要加一个[]p4 = NULL;

new 整型地址

 int** p5 = new int*;delete p5;p5 = NULL;

new 整型指针数组

    int** p6 = new int* [5];delete[]p6;p6 = NULL;

new 整型数组指针

 int(**p7)[5] = new (int(*)[5]);delete p7;p7 = NULL;

new 整型的二维数组

 int(*p8)[2] = new int[3][2]{ {1,2},{3,4},{5,6} };//[2]表示带有两个成员的一维数组delete[]p8;p8 = NULL;

new 自定义类型(结构体)

 struct Node{};Node* p9 = new Node;delete p9;p9 = NULL;

new 函数指针

void fun(int a)
{cout << __FUNCTION__ << "  " << a << endl;
}void(*p10)(int);void(**p11)(int)=new (void (*)(int));*p11 = &fun;(**p11)(20);delete p11;p11 = NULL;

总结

两者区别:

1.new、delete是关键字,需要C++的编译期支持,malloc()、free()是函数,需要头文件支持。

2.new申请空间不需要指定申请大小,根据类型自动计算,new返回的时申请类型的地址,不需要强转,malloc()需要显示的指定申请空间的大小(字节),返回void*,需要强转成我们需要的类型。

3.new申请空间的同时可以设置初始化,而malloc需要手动赋值。

4.至关重要的一点:new申请类、结构体对象内存空间会自动调用构造函数,delete会自动调用类、结构体的析构函数,单独的malloc()和free()则不会调用构造、析构函数。

C++ 动态申请空间相关推荐

  1. 什么是指针以及如何动态申请空间

    int a;int *p;第一个比较熟悉,就是定义一个整型变量.第二个就是定义了一个整型指针变量p: 1.指针有什么作用? 指针是存储一个地址!注意是地址,不是什么具体的数值. 2.指针如何才能存储变 ...

  2. 关于C/C++动态申请空间释放和内存泄漏问题介绍

    1. 动态申请空间 1.1 基本内容 Ⅰ 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式). Ⅱ 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中( ...

  3. C/C++动态申请空间方式

    C语言中用malloc/free: C++里用new/delete; 1:C语言动态申请一维数组: #include<stdio.h> #include<stdlib.h> i ...

  4. 走进C++程序世界-----指针(动态申请空间和释放空间)

    使用关键字NEW分配内存 在讲解分配内存之前,首先来理解下内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区这些也是初学者容易混淆的地方.我的博客中有一篇文章描述C语言中代码分配情况,点击链 ...

  5. C语言如何动态申请空间(一维和二维)

    C语言如何动态申请一维和二维空间呢? 这里有个小例子,看过后就很容易理解 编译环境为vs2013 #include <stdio.h> #include <stdlib.h> ...

  6. C/C++动态申请空间

    C语言中用malloc/free: C++里用new/delete; 1:C语言动态申请一维数组: #include<stdio.h> #include<stdlib.h> i ...

  7. 【C语言】动态申请空间

    在很多情况下,我们不知道所要建立数组的大小,而是想根据需求动态的建立数组.但是通常使用 int arr[n] 这样的写法编译器会报错,因为n是变量. int n = 10; int array[n]; ...

  8. c++中动态申请空间的它们——new和delete

    今天重点说的是delete的一个小区别~~~ c++中对new申请的内存释放方式有delete和delect[]两种方式,那么这两种方式具体该怎么理解呢? 我们都知道,在c++中用new分配内存,用d ...

  9. C++学习之路抓紧跑路版(七)-动态申请内存空间

    文章目录 前言 一.如何申请动态内存空间? 二.练习 总结 前言 今天我们来看下在C++中如何动态申请内存空间,不多比比 一.如何申请动态内存空间? 在C++中我们用new/delete来申请和释放内 ...

最新文章

  1. Sass (Syntactically Awesome StyleSheets)
  2. FD.io/VPP — VPP Agent — Overview
  3. SpringCloud之微服务
  4. linux nohup screen注解
  5. jenkins的安装配置,插件配置,安装插件,配置maven,jdk路径,配置安装插件,项目配置,自动构建配置
  6. 还有什么芯片没涨?ST、ON、Microchip、Xilinx、东芝开启新一轮涨价潮
  7. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)
  8. 【LeetCode笔记】104. 二叉树的最大深度(Java、DFS、二叉树)
  9. VSCode运行Python教程
  10. [课后作业] 第032讲:异常处理:你不可能总是对的
  11. [转载]taking photos with live image preview
  12. 伪随机生成器具体实现——线性同余法
  13. $$$$方正GBK字库内码表$$$$
  14. JetBrains Rider 软件使用快速入门
  15. 7个等级 容灾等级_容灾的等级
  16. 数组的常用算法(1)--由“为了集齐108将买多少袋干脆面”展开去
  17. 云e办学习笔记(十五)Redis学习以及相关部署
  18. 如何使用iAd在应用程序中展示Banne…
  19. 计算机的程序代码是储存在什么中的,计算机的一切程序和数据都是以什么情势贮存?...
  20. Android登录客户端,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

热门文章

  1. linux系统用unzip解压大于4G文件
  2. 项目日志20190705
  3. windows升级node的方法-更新node
  4. 在Qt中用QAxObject来操作Excel
  5. 鸿蒙HarmonyOS与安卓Android的全面对比
  6. 大数据时代,个人隐私如何保护?杨幂,张若昀纷纷斥责隐私遭到泄露......
  7. python给手机发通知_【趣味案例】用Python向手机发送通知
  8. 诛天者 pat basic 练习五十二 卖个萌
  9. STIL中可以有基于时间点的数据
  10. Adobe Acrobat 9 pro弹框