【define和const常量】以及【new和malloc】的区别

define和const常量的区别

1、编译器处理不同
宏定义是一个“编译时”概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束于编译时期;const常量是一个“运行时”概念,在程序运行使用,类似于一个只读行数据

2、存储方式不同
宏定义是直接替换,不会分配内存,存储与程序的代码段中;
const常量需要进行内存分配

3、类型和安全检查不同
宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;
const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查

4、定义域不同:宏定义的定义域存在于整个生命周期,而const的定义域只在自己的大括号内;

5、宏定义不能作为参数传递给函数,而const常量可以再函数的参数列表中出现;

new和malloc的区别

1、性质不同:malloc/ free是 C++/C语言的标准库函数,而new/ delete是C++的运算符。

2、返回类型不同:new返回有类型的指针,malloc返回无类型的指针

3、失败报错信息不同:malloc分配内存失败会返回空、new内存分配失败时会抛出bac_alloc异常

4、使用new操作符申请内存分配是无需指定内存块的大小,而malloc则需要显式地指出所需的内存大小。

5、malloc申请的内存空间要free释放,而new申请的存储空间要delete释放;不能混用

你可能感兴趣的:(C语言知识和练习)