面试题答案
一键面试类型检查机制不同
define
:define
是预处理指令,在预处理阶段进行文本替换,不进行类型检查。- 例如:
#define PI 3.14159 // 下面代码在预处理后变为 int r = 3.14159; 编译会报错,但define本身不检查类型 int r = PI;
const
:const
定义的常量是有类型的,在编译阶段进行类型检查。- 例如:
const double PI = 3.14159; int r = PI; // 编译报错,因为类型不匹配,const常量有类型检查
内存分配方式差异
define
:- 由于是文本替换,不会为其分配内存。
- 例如:
#define MAX_SIZE 100 int arr[MAX_SIZE]; // 预处理后变为 int arr[100]; 不会为MAX_SIZE分配内存
const
:- 对于局部
const
变量,存储在栈区。 - 例如:
void func() { const int num = 10; // num存储在栈区 }
- 对于全局
const
变量,存储在只读数据段(常量区)。 - 例如:
const int global_num = 20; // global_num存储在只读数据段 int main() { return 0; }
- 对于局部