- 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");
View Code

 

c++重点知识点
在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; //再进行宏替换,又一次分配内存! 
View Code

相关文章: