define 定义的宏指令,程序是在预处理阶段将#define定义的宏与内容进行替换,因此在程序运行时,内存的常量区是没有#define定义的宏的,系统并不给他分配内存,而且在编译的时候也不会检查数据类型,出错的可能性大。
const 定义的常量,是在内存的常量区中的,系统会为他分配内存,在编译的时候会检查数据类型。
另外:#define 注意边缘效应:
define N 2 + 3 // 这样定义
int a = N / 2; // 预想结果应该是2, 但结果却是3
附:
static 所定义的变量都是静态变量,存在于内存静态区域,而所有未被初始化的静态变量系统都会给初始化为0.地址为0x00,而且只初始化一次。static控制了变量的作用范围。
全局变量和static变量都在内存静态区
static 关键字区别:
static全局变量和普通的全局变量的区别:static的全局变量只初始化一次,防止在其他的类文件中被使用。
static局部变量和普通的局部变量的区别:static的局部变量只初始化一次,下一次依据上一次的结果,因为内存地址就一份。
static函数与普通函数的区别:static函数只在内存中存有一份,而普通的函数在每次调用中都会维持一份拷贝