首页 > 代码库 > const Basic

const Basic


 

Highlight

1.  const 修饰基本类型

2.  const和指针

3.  typedef & const

4.  const用法和使用位置


 

 

1.  const 修饰基本类型

  const int a  int const a

    上面两个都一样,描述的都是一个const的整形变量,存放在只读区域

 

2.  const和指针

1.  const int * a2.  int *const a3.  int const* const a

  对指针的理解
  int *a[10]        []优先级高于*,是一个数组,每个成员类型为指针,指向int
  int (*a)[10]     ()优先级高于[] 是一个指针,指向的类型是一个数组

  指针的判断从右向左

    1).  const int*a            //a是一个指向const int的指针 指向的数据不可以修改

    2).  int *const a          //只读的指针,指向的类型为int类型的变量

    3).  int const* const a     //指针不可修改, int const是指针指向的类型,仍然是const

  1 #include <stdio.h>  2  3 int main()  4 {  5     char static data_var=c;  6     char const data_const=a;  7  8     char *const p1=&data_var;  9     const char* p2=&data_const;
14 p1=&data_var;  // 报错!!!!         p1 不能修改指针 15 *p1=W;      // 编译通过            p1 可以修改数据 16   17 p2=&data_var;  // 编译通过       p2可以修改 18 *p2=a;      // 报错!!!      p2不可以修改数据 19 20 }

 

3.  typedef & const

    问题: const void * ptr 和 const vp ptr 的存储位置是否一样

typedef void*VP;const void * ptr;  存储位置:const VP ptr;    存储位置:

    1). 了解基本存储位置

        const类型变量 只读区域          ---linux里--const类型变量----代码段
        全局&静态     数据段 bs段
        局部            栈里面

    2). typedef

        typedef定义一种数据类型, 一定要与define区分开
        所以代码中的 typedef void* VP;       //VP 是类型名字,其余的是这个类型的真实类型

        const VP ptr
            -->思考: 是不是替换为 const void *ptr??? 不是, void *是一个整体
    

        上面已经说过  const int i == int const i;  所以  VP const prt 既 void *const ptr

        const VP ptr  ==  void * const ptr; 

        所以上面两个存储位置不同

 

4.  const用法和使用位置

作用
    1. 传递一个‘不修改’ 的信号
    2. 编译器生成精简代码减少bug
    3. 合理保护只读数据

使用位置
    1. 定义常亮, 防止被修改
    2. 函数参数,不希望子函数修改被调用函数的某个数据
        char* strcpy(char* dest, const char* src)
        char* strncpy(char* dest, const char* src, size_t n)
    3. C++类的成员函数

 

const Basic