- const加强
在变量前加const,说明变量是常量只读属性。假如用指针去修改const常量会用什么结果。上例子:
//a 是一个只读的常量,按照理论应该不能被修改 const int a = 10;//内存中为a分配地址,赋值 printf("sssss:&a:%d", &a); int *p = NULL; int *p2 = NULL; //当你对a取地址的时候,有一个内存空间(&a a的内存空间) p = (int *)&a;//此时取常量地址,同时将a值存在符号表中 printf("&a:%d p的值:%d", &a, p); *p = 11;//修改内存中值 printf("修改之后a:%d \n", a);//通过常量a(修饰符号表)而不是之前内存地址了。读取符号表中的值。 printf("*p:%d \n", *p);//读取内存中值,此时已经修改 printf("*p2:%d \n", *p2);//再次读取内存中,发现是11. system("pause");
在c++中const变量是只读的,当声明这个变量为常量的时候,这个变量不能修改。加入用指针获取地址,修改时,会数值分配到符号表,指针可以修改数值,但是变量a的值没有变化。
const和define区别
(1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
(4)const 可以节省空间,避免不必要的内存分配。 例如:
#define PI 3.14159 //常量宏 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 …… double i=Pi; //此时为Pi分配内存,以后不再分配! double I=PI; //编译期间进行宏替换,分配内存 double j=Pi; //没有内存分配 double J=PI; //再进行宏替换,又一次分配内存!