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不可以。

posted @ 2019-10-16 20:48  代号870  阅读(327)  评论(0编辑  收藏  举报