• const与宏定义区别_____常量指针与指针常量_____malloc/free和new/delete


    //编辑 ---> 预编译(预处理) --> 编译 --> 汇编 --> 链接 --> 可执行程序(运行)
    
    //定义常量
    //
    //const修饰的常量与宏定义有什么差别?
    //1. 发生的时机:
    //      宏定义是预编译, 进行简单的字符串替换
    //      const关键字是编译时, 其定义的常量是有类型检查
    //
    //使用宏定义是有概率会发生错误;
    //2. 推荐使用const关键字定义常量,能够减少
    //犯错误的概率
    //
    #define NUMBER 100
    
    void test0()
    {//内置类型: char/short/int/long   float double  void
     //指针类型
        const int number = 1;//常量
        //number = 10;//error
    
        //const int number2;//error
    }
    //====================================================================
    //数组指针   指针数组
    //
    //函数指针   指针函数
    //
    //常量指针   指针常量
    
    
    void test1()
    {
        int number = 10;
        int number2 = 20;
        const int * pa = &number;//常量指针(pointer to const)
        *pa = 20;//不能通过pa指针修改所指变量的值
        pa = &number2;//可以改变pa的指向
    
        int const * pc = &number;
        *pc = 20;
        pc = &number2;
    
        int * const pb = &number;//指针常量(const pointer)
        *pb = 20;//可以通过pb指针修改所指变量的值
        pb = &number2;//不能改变pb的指向
    
        const int * const pd = &number;//两者都不能进行修改 
    
    }

    ==============================================

    malloc/free和new/delete

    说明与区别:

    这个链接非常好!

    https://www.cnblogs.com/maluning/p/7944231.html

    底层实现:

    https://blog.csdn.net/ZWE7616175/article/details/80330800

    相同点:都是从堆上申请空间,用户需要自己来管理。
    不同点:
    1.所属语言
    new是C++特性,malloc是C的。C++一般使用的new,但也可以使用malloc,而C用malloc、realloc、calloc。
    2.申请释放方式
    new和delete,malloc和free配对使用。new的使用比malloc简单,内部已经实现了大小的计算、类型转换等工作,而malloc使用时需要计算大小及进行类型转换。
    3.malloc是标准库函数,new是C++的运算符。
    new可以被重载,但malloc不可以,malloc需要库函数的支持,new不需要。
    4.构造与析构
    new和delete会自动调用构造函数和析构函数,但是malloc和free不会。
    5.申请内存失败
    申请内存失败,默认new抛出异常,malloc返回NULL。
    6.重新分配内存
    malloc可利用realloc重新分配内存,new不可以。
    7.类型安全性
    new会检查类型是否对应,如果不对应会保存,但malloc只关注申请内存的多少,不会检查类型。
    8.类型转换
    malloc返回的类型是void,所以在调用malloc时要进行显式的类型转换,将void转换成所需的指针类型,new不需要。
    9.数组分配
    new有明确的方式处理数组的分配,即new[],释放也有delete[],malloc没有。
    10.设置内存分配器
    new可以设置自己的内存分配器,malloc不可以。

  • 相关阅读:
    [Cocos2d-x]Cocos2d-x开发中C++调用Object-c
    [数据结构]基本概念
    [Cocos2d-x]Mac下运行HelloCpp For Android
    [Android] JDK , NDK , JNI
    [Cocos2d-x]坐标系
    [Android]mac下开发环境搭建
    [Cocos2d-x]博客推荐
    nyoj-506-洗澡
    nyoj-479-Coprimes
    nyoj-464-Cookies
  • 原文地址:https://www.cnblogs.com/WHUT-Simon/p/11688370.html
Copyright © 2020-2023  润新知