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